Merge remote-tracking branch 'woothemes/master'

This commit is contained in:
Ewout Fernhout 2015-10-01 17:14:58 +02:00
commit 9d78297e9e
279 changed files with 10182 additions and 1889 deletions

View File

@ -10,6 +10,7 @@ php:
env:
- WP_VERSION=latest WP_MULTISITE=0
- WP_VERSION=4.3 WP_MULTISITE=0
- WP_VERSION=4.2 WP_MULTISITE=0
- WP_VERSION=4.1 WP_MULTISITE=0
- WP_VERSION=4.0 WP_MULTISITE=0
@ -27,5 +28,3 @@ script: phpunit -c phpunit.xml.dist
after_script:
- bash tests/bin/travis.sh after
- wget https://scrutinizer-ci.com/ocular.phar
- php ocular.phar code-coverage:upload --format=php-clover ./tmp/clover.xml

View File

@ -21,9 +21,6 @@ module.exports = function( grunt ) {
'Gruntfile.js',
'<%= dirs.js %>/admin/*.js',
'!<%= dirs.js %>/admin/*.min.js',
'!<%= dirs.js %>/admin/jquery.flot*',
'!<%= dirs.js %>/admin/accounting.js',
'!<%= dirs.js %>/admin/round.js',
'<%= dirs.js %>/frontend/*.js',
'!<%= dirs.js %>/frontend/*.min.js',
'includes/gateways/simplify-commerce/assets/js/*.js',
@ -42,33 +39,30 @@ module.exports = function( grunt ) {
cwd: '<%= dirs.js %>/admin/',
src: [
'*.js',
'!*.min.js',
'!Gruntfile.js',
'!jquery.flot*' // !jquery.flot* prevents to join all jquery.flot files in jquery.min.js
'!*.min.js'
],
dest: '<%= dirs.js %>/admin/',
ext: '.min.js'
}]
},
adminflot: { // minify correctly the jquery.flot lib
files: {
'<%= dirs.js %>/admin/jquery.flot.min.js': ['<%= dirs.js %>/admin/jquery.flot.js'],
'<%= dirs.js %>/admin/jquery.flot.pie.min.js': ['<%= dirs.js %>/admin/jquery.flot.pie.js'],
'<%= dirs.js %>/admin/jquery.flot.resize.min.js': ['<%= dirs.js %>/admin/jquery.flot.resize.js'],
'<%= dirs.js %>/admin/jquery.flot.stack.min.js': ['<%= dirs.js %>/admin/jquery.flot.stack.js'],
'<%= dirs.js %>/admin/jquery.flot.time.min.js': ['<%= dirs.js %>/admin/jquery.flot.time.js']
}
},
jquery: {
vendor: {
files: {
'<%= dirs.js %>/accounting/accounting.min.js': ['<%= dirs.js %>/accounting/accounting.js'],
'<%= dirs.js %>/jquery-blockui/jquery.blockUI.min.js': ['<%= dirs.js %>/jquery-blockui/jquery.blockUI.js'],
'<%= dirs.js %>/jquery-cookie/jquery.cookie.min.js': ['<%= dirs.js %>/jquery-cookie/jquery.cookie.js'],
'<%= dirs.js %>/jquery-flot/jquery.flot.min.js': ['<%= dirs.js %>/jquery-flot/jquery.flot.js'],
'<%= dirs.js %>/jquery-flot/jquery.flot.pie.min.js': ['<%= dirs.js %>/jquery-flot/jquery.flot.pie.js'],
'<%= dirs.js %>/jquery-flot/jquery.flot.resize.min.js': ['<%= dirs.js %>/jquery-flot/jquery.flot.resize.js'],
'<%= dirs.js %>/jquery-flot/jquery.flot.stack.min.js': ['<%= dirs.js %>/jquery-flot/jquery.flot.stack.js'],
'<%= dirs.js %>/jquery-flot/jquery.flot.time.min.js': ['<%= dirs.js %>/jquery-flot/jquery.flot.time.js'],
'<%= dirs.js %>/jquery-payment/jquery.payment.min.js': ['<%= dirs.js %>/jquery-payment/jquery.payment.js'],
'<%= dirs.js %>/jquery-qrcode/jquery.qrcode.min.js': ['<%= dirs.js %>/jquery-qrcode/jquery.qrcode.js'],
'<%= dirs.js %>/jquery-serializejson/jquery.serializejson.min.js': ['<%= dirs.js %>/jquery-serializejson/jquery.serializejson.js'],
'<%= dirs.js %>/jquery-tiptip/jquery.tipTip.min.js': ['<%= dirs.js %>/jquery-tiptip/jquery.tipTip.js'],
'<%= dirs.js %>/jquery-ui-touch-punch/jquery-ui-touch-punch.min.js': ['<%= dirs.js %>/jquery-ui-touch-punch/jquery-ui-touch-punch.js'],
'<%= dirs.js %>/prettyPhoto/jquery.prettyPhoto.init.min.js': ['<%= dirs.js %>/prettyPhoto/jquery.prettyPhoto.init.js'],
'<%= dirs.js %>/prettyPhoto/jquery.prettyPhoto.min.js': ['<%= dirs.js %>/prettyPhoto/jquery.prettyPhoto.js'],
'<%= dirs.js %>/round/round.min.js': ['<%= dirs.js %>/round/round.js'],
'<%= dirs.js %>/select2/select2.min.js': ['<%= dirs.js %>/select2/select2.js'],
'<%= dirs.js %>/stupidtable/stupidtable.min.js': ['<%= dirs.js %>/stupidtable/stupidtable.js'],
'<%= dirs.js %>/zeroclipboard/jquery.zeroclipboard.min.js': ['<%= dirs.js %>/zeroclipboard/jquery.zeroclipboard.js']

View File

@ -40,7 +40,7 @@ $(window).load(function() {
// Search autocompletion
var autocompleteFound = false;
var autocompleteFiles = {'c': 'class', 'co': 'constant', 'f': 'function', 'm': 'class', 'mm': 'class', 'p': 'class', 'mp': 'class', 'cc': 'class'};
var $search = $('#search input[name=q]');
var $search = $('#search').find('input[name=q]');
$search
.autocomplete(ApiGen.elements, {
matchContains: true,
@ -92,7 +92,7 @@ $(window).load(function() {
if ('' === query) {
return false;
}
return !autocompleteFound && '' !== $('#search input[name=cx]').val();
return !autocompleteFound && '' !== $('#search').find('input[name=cx]').val();
});
// Save natural order

File diff suppressed because one or more lines are too long

View File

@ -2744,7 +2744,7 @@ img.help_tip {
float: right;
height: 26px;
width: 17px;
display: none;
visibility: hidden;
vertical-align: middle;
margin-right: .5em;
color: #a0a5aa;
@ -2765,7 +2765,7 @@ img.help_tip {
}
h3:hover, &.ui-sortable-helper {
.sort {
display: block;
visibility: visible;
}
}
}
@ -2992,8 +2992,26 @@ img.help_tip {
zoom: 1;
}
select.attribute_taxonomy,
button.add_attribute,
.expand-close {
margin-right: 2px;
color: #777;
font-size: 12px;
font-style: italic;
a {
background: none;
padding: 0;
font-size: 12px;
text-decoration: none;
}
}
&#product_attributes {
.expand-close {
float: right;
line-height: 28px;
}
}
button.add_variable_attribute,
.fr {
float: right;
@ -3061,8 +3079,9 @@ img.help_tip {
color: red;
font-weight: normal;
line-height: 26px;
display: none;
text-decoration: none;
position: relative;
visibility: hidden;
}
strong {
@ -3073,12 +3092,13 @@ img.help_tip {
select {
font-family: sans-serif;
margin: 0 1px;
max-width: 20%;
margin: .25em .25em .25em 0;
}
.handlediv {
background-position: 6px 5px !important;
display: none;
visibility: hidden;
height: 26px;
}
@ -3089,11 +3109,15 @@ img.help_tip {
&.woocommerce_variation h3 {
cursor: pointer;
padding: .5em .75em .5em 1em !important;
a.delete, .handlediv, .sort {
margin-top: .25em;
}
}
h3:hover, &.ui-sortable-helper {
a.delete, .handlediv {
display: block;
visibility: visible;
}
}
@ -3179,19 +3203,6 @@ img.help_tip {
font-style: italic;
}
.expand-close {
margin-right: 2px;
color: #777;
font-size: 12px;
font-style: italic;
a {
background: none;
padding: 0;
font-size: 12px;
text-decoration: none;
}
}
a {
padding: 0px 10px 3px;
background: rgba(0, 0, 0, 0.05);
@ -3211,6 +3222,9 @@ img.help_tip {
.variations-defaults {
float: left;
select {
margin: .25em .25em .25em 0;
}
}
.woocommerce_variable_attributes {
@ -4045,7 +4059,7 @@ table.bar_chart {
width: 94%;
.sort {
display: none;
visibility: hidden;
}
}
}
@ -4146,6 +4160,78 @@ table.bar_chart {
text-align: center;
margin-top: 10px;
}
.post-type-product {
.wp-list-table {
.column-thumb {
display: none;
text-align: left;
padding-bottom: 0;
&:before {
display: none !important;
}
img {
max-width: 32px;
}
}
.is-expanded {
td {
&:not(.hidden) {
overflow: visible;
}
}
}
.toggle-row {
top: -28px;
}
}
}
.post-type-shop_order {
.wp-list-table {
.column-order_status {
display: none;
text-align: left;
padding-bottom: 0;
mark {
margin: 0;
}
&:before {
display: none !important;
}
}
.column-customer_message,
.column-order_notes {
text-align: inherit;
}
.column-order_notes {
.note-on {
font-size: 1.3em;
margin: 0;
}
}
.is-expanded {
td {
&:not(.hidden) {
overflow: visible;
}
}
}
.toggle-row {
top: -15px;
}
}
}
}
@media only screen and (max-width: 500px) {

File diff suppressed because one or more lines are too long

View File

@ -274,10 +274,18 @@ body {
}
}
}
.woocommerce-tracker {
.woocommerce-tracker, .woocommerce-language-pack, .updated {
padding: 24px 24px 0;
margin: 0 0 24px 0;
overflow: hidden;
background: #f5f5f5;
p {
padding: 0;
margin: 0 0 12px;
}
p:last-child {
margin: 0 0 24px 0;
}
}
}
.wc-setup-steps {
@ -286,15 +294,19 @@ body {
list-style: none outside;
overflow: hidden;
color: #ccc;
width:100%;
display: -webkit-inline-flex;
display: -ms-inline-flexbox;
display: inline-flex;
li {
width: 20%;
float: left;
padding: 0 0 1em;
padding: 0 0 0.8em;
margin: 0;
text-align: center;
position: relative;
border-bottom: 4px solid #ccc;
line-height: 1;
line-height: 1.4em;
}
li:before {
content: "";
@ -351,4 +363,4 @@ body {
margin: 1.18em 0;
display: block;
text-align: center;
}
}

File diff suppressed because one or more lines are too long

View File

@ -30,6 +30,9 @@ p.demo_store {
color: $primarytext;
z-index: 99998;
box-shadow: 0 1px 1em rgba(0,0,0,0.2);
a {
color: $primarytext;
}
}
.admin-bar {
@ -1786,6 +1789,7 @@ p.demo_store {
text-align: left;
margin: 0;
font-weight: normal;
@include clearfix;
input {
margin: 0 1em 0 0;
@ -1811,8 +1815,9 @@ p.demo_store {
div.payment_box {
position: relative;
width: 96%;
padding: 1em 2%;
box-sizing: border-box;
width: 100%;
padding: 1em;
margin: 1em 0 1em 0;
font-size: 0.92em;
border-radius: 2px;
@ -1891,15 +1896,15 @@ p.demo_store {
margin-bottom: 0;
}
&:after {
&:before {
content: "";
display: block;
border: 8px solid darken( $secondary, 5% ); /* arrow size / color */
border: 1em solid darken( $secondary, 5% ); /* arrow size / color */
border-right-color: transparent;
border-left-color: transparent;
border-top-color: transparent;
position: absolute;
top: -3px;
top: -.75em;
left: 0;
margin: -1em 0 0 2em;
}

BIN
assets/fonts/WooCommerce.eot Normal file → Executable file

Binary file not shown.

140
assets/fonts/WooCommerce.svg Normal file → Executable file
View File

@ -3,6 +3,7 @@
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>
<json>
<![CDATA[
{
"fontFamily": "WooCommerce",
"fontURL": "http://woothemes.com",
@ -10,7 +11,7 @@
"designerURL": "http://jameskoster.co.uk",
"license": "SIL OFL",
"licenseURL": "http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL",
"version": "Version 1.0.3",
"version": "Version 1.0",
"majorVersion": 0,
"fontId": "WooCommerce",
"psName": "WooCommerce",
@ -18,78 +19,79 @@
"fullName": "WooCommerce",
"description": "Font generated by IcoMoon."
}
]]>
</json>
</metadata>
<defs>
<font id="WooCommerce" horiz-adv-x="1024">
<font-face units-per-em="1024" ascent="960" descent="-64" />
<missing-glyph horiz-adv-x="1024" />
<glyph unicode="&#x20;" d="" horiz-adv-x="512" />
<glyph unicode="&#xe000;" d="M307.2 780.752v-153.6h51.248v153.6h-51.248zM230.4 780.752v-153.6h25.648v153.6h-25.648zM435.2 780.752v-153.6h128.048v153.6h-128.048zM179.2 780.752v-153.6h25.648v153.6h-25.648zM819.152 780.752v-153.6h25.648v153.6h-25.648zM742.384 780.752v-153.6h25.6v153.6h-25.6zM614.4 780.752v-153.6h51.152v153.6h-51.152zM947.136 883.152v-358.352h-870.336v358.352h870.336zM971.312 960h-895.888c-17.104 0-42.656-5.728-55.472-18.512-12.784-14.208-19.904-24.208-19.904-41.2v-382.56c0-17.088 7.12-37.040 19.904-51.248 12.832-12.784 38.384-18.464 55.456-18.464h895.904c17.088 0 21.392 5.696 34.16 18.464 12.784 14.208 18.464 34.16 18.464 51.248l0.016 382.56c0 16.992-5.696 32.672-18.464 45.456s-17.088 14.256-34.176 14.256zM308.624 122.336c0-9.952 5.728-18.464 14.256-25.6-31.28-11.344-54.064-41.2-54.064-78.224 0-45.456 35.552-82.496 81.104-82.496h375.344c45.552 0 81.104 37.040 81.104 82.496 0 37.040-22.768 68.272-55.456 78.224 9.904 10 15.648 19.904 15.648 32.672 0 91.008-72.496 164.976-162.128 164.976-52.592 0-101.024-27.040-129.424-68.224-15.6 8.512-32.672 12.784-51.152 12.784-64.016 0-115.232-52.592-115.232-116.608z" />
<glyph unicode="&#xe001;" d="M547.504-49.936l143.696 160.688c22.768 18.464 22.768 36.992 0 55.504h-102.4v143.6c0 15.648-15.648 35.552-36.944 35.552h-79.664c-21.344 0-36.992-14.16-36.992-31.28v-147.856h-85.264c-21.392-18.512-35.552-37.040-12.864-55.504l143.696-160.688c21.28-18.496 45.44-18.496 66.736-0.016zM307.2 780.56v-153.6h51.248v153.6h-51.248zM230.4 780.56v-153.6h25.648v153.6h-25.648zM435.2 780.56v-153.6h128.048v153.6h-128.048zM179.2 780.56v-153.6h25.648v153.6h-25.648zM819.152 780.56v-153.6h25.648v153.6h-25.648zM742.384 780.56v-153.6h25.6v153.6h-25.6zM614.4 780.56v-153.6h51.152v153.6h-51.152zM947.136 882.96v-358.352l-870.336-0.016v358.368h870.336zM971.312 959.792h-895.888c-17.088 0-42.624-5.728-55.456-18.512-12.8-14.208-19.92-24.208-19.92-41.2v-382.56c0-17.088 7.12-37.040 19.904-51.248 12.832-12.784 38.384-18.464 55.456-18.464h895.904c17.088 0 21.392 5.696 34.16 18.464 12.784 14.208 18.464 34.16 18.464 51.248l0.016 382.56c0 16.992-5.696 32.672-18.464 45.456s-17.088 14.256-34.176 14.256z" />
<glyph unicode="&#xe002;" d="M307.2 780.752v-153.6h51.248v153.6h-51.248zM230.4 780.752v-153.6h25.648v153.6h-25.648zM435.2 780.752v-153.6h128.048v153.6h-128.048zM179.2 780.752v-153.6h25.648v153.6h-25.648zM819.152 780.752v-153.6h25.648v153.6h-25.648zM742.384 780.752v-153.6h25.6v153.6h-25.6zM614.4 780.752v-153.6h51.152v153.6h-51.152zM947.136 883.152v-358.352h-870.336v358.352h870.336zM971.312 960h-895.888c-17.104 0-42.656-5.728-55.472-18.512-12.784-14.208-19.904-24.208-19.904-41.2v-382.56c0-17.088 7.12-37.040 19.904-51.248 12.832-12.784 38.384-18.464 55.456-18.464h410.992v-76.8h-358.352v-128l-52.624-0.016c-17.088 0-42.624-5.648-55.456-18.432-12.8-14.256-19.92-24.24-19.92-41.296v-177.76c0-17.040 7.12-36.992 19.904-51.2 12.832-12.784 38.384-18.512 55.456-18.512h179.152c17.088 0 21.392 5.728 34.16 18.512 12.784 14.208 18.464 34.16 18.464 51.2v177.76c0 17.040-5.696 32.72-18.464 45.504s-17.088 14.208-34.16 14.208h-75.376l0.016 76.864h307.2v-76.848h-52.592c-17.136 0-42.672-5.648-55.504-18.432-12.784-14.256-19.856-24.256-19.856-41.296v-177.76c0-17.040 7.072-36.992 19.856-51.2 12.832-12.784 38.384-18.512 55.504-18.512h179.152c17.040 0 21.392 5.728 34.16 18.512 12.784 14.208 18.432 34.16 18.432 51.2v177.76c0 17.040-5.648 32.72-18.432 45.504s-17.136 14.208-34.16 14.208h-75.376v76.864h307.2v-76.848h-52.624c-17.088 0-42.624-5.648-55.504-18.432-12.784-14.256-19.904-24.256-19.904-41.296v-177.76c0-17.040 7.12-36.992 19.904-51.2 12.864-12.784 38.432-18.512 55.504-18.512h179.152c17.088 0 21.392 5.728 34.16 18.512 12.784 14.208 18.464 34.16 18.464 51.2v177.76c0 17.040-5.696 32.72-18.464 45.504s-17.088 14.208-34.16 14.208h-75.328v128l-358.384 0.032v76.8h433.712c17.088 0 21.392 5.696 34.16 18.464 12.784 14.208 18.464 34.16 18.464 51.248l0.016 382.56c0 16.992-5.696 32.672-18.464 45.456s-17.088 14.256-34.176 14.256zM256.048 192.048v-204.848h-204.8v204.848h204.8zM972.752 192.048v-204.848h-204.752v204.848h204.752zM614.4 192.048v-204.848h-204.752v204.848h204.752z" />
<glyph unicode="&#xe003;" d="M307.2 729.552v-409.504h51.248l-0.016 409.504h-51.232zM230.4 729.552v-409.504h25.648v409.504h-25.648zM563.248 729.552v-409.504h51.152v409.504h-51.152zM179.2 729.552v-409.504h25.648v409.504h-25.648zM665.552 729.552v-409.504h25.648v409.504h-25.648zM486.4 729.552v-409.504h25.552v409.504h-25.552zM435.2 729.552v-409.504h25.6v409.504h-25.6zM793.552 832v-614.4h-716.752v614.4h716.752zM817.76 908.8h-742.336c-17.088 0-42.624-5.696-55.456-18.512-12.8-14.256-19.92-24.16-19.92-41.296v-638.464c0-17.088 7.12-37.040 19.904-51.2 12.832-12.832 38.384-18.512 55.456-18.512h742.336c17.040 0 21.344 5.696 34.112 18.512 12.784 14.16 18.464 34.112 18.464 51.2l0.032 638.464c0 17.136-5.696 32.72-18.464 45.552-12.784 12.768-17.088 14.256-34.128 14.256zM230.4 64h-76.8v-7.072c0-17.088 7.168-36.944 19.952-51.2 12.784-12.832 38.384-18.512 55.456-18.512h742.304c17.088 0 21.392 5.696 34.16 18.512 12.784 14.256 18.464 34.112 18.464 51.2l0.032 638.56c0 17.040-5.696 32.672-18.464 45.456s-17.088 14.256-34.16 14.256h-24.16v-691.2h-716.784z" />
<glyph unicode="&#xe004;" d="M511.984-63.952c282.992 0 512 228.96 512 511.904 0 283.024-229.008 512-512 512-283.024 0-511.952-228.96-511.952-512 0-282.944 228.912-511.904 511.952-511.904zM511.984 0.032c-247.472 0-447.936 200.528-447.936 447.936 0 247.472 200.448 448.032 447.936 448.032 247.424 0 447.984-200.528 447.984-448.032-0.016-247.408-200.544-447.936-447.984-447.936zM322.096 437.44v-51.2h82.496l-89.536-96.704c-11.392-11.392-10-34.112 2.832-48.336 12.784-12.832 29.872-14.208 42.624-2.832l89.584 96.656v-76.752h51.248v179.168h-179.248zM706.144 463.088v51.152h-86.752l89.584 95.264c11.392 11.392 9.952 31.328-2.832 45.504-12.864 12.832-28.528 14.208-39.904 1.44l-88.096-93.872 0.016 79.664h-51.248v-179.152h179.232z" />
<glyph unicode="&#xe005;" d="M524.768 639.984v-51.2h82.496l-236.080-233.232v79.616h-51.152v-179.152h179.152v51.2h-86.72l240.304 230.416v-76.8h51.248v179.152h-179.248zM511.984-63.952c282.992 0 512 228.96 512 511.904 0 283.024-229.008 512-512 512-283.024 0-511.952-228.96-511.952-512 0-282.944 228.912-511.904 511.952-511.904zM511.984 0.032c-247.472 0-447.936 200.528-447.936 447.936 0 247.472 200.448 448.032 447.936 448.032 247.424 0 447.984-200.528 447.984-448.032-0.016-247.408-200.544-447.936-447.984-447.936z" />
<glyph unicode="&#xe006;" d="M947.136 806.4h-870.288v-716.8h870.304l-0.016 716.8zM971.312 883.152c17.136 0 21.344-1.44 34.16-14.208 12.784-12.784 18.512-28.48 18.512-45.504v-740.88c0-17.136-5.728-37.040-18.512-51.296-12.832-12.784-17.040-18.432-34.16-18.432l-895.856 0.032c-17.136 0-42.72 5.648-55.504 18.432-12.784 14.256-19.952 34.16-19.952 51.296l-0.016 740.832c0 17.040 7.168 27.040 19.952 41.296 12.784 12.784 38.384 18.432 55.504 18.432l895.872-0.016zM307.2 703.952h51.184v-511.888h-51.184zM230.448 703.952h25.6v-511.888h-25.6zM716.8 703.952h51.136v-511.888h-51.136zM435.2 703.952h76.8v-511.888h-76.8zM179.248 703.952h25.552v-511.888h-25.552zM819.2 703.952h25.552v-511.888h-25.552zM639.952 703.952h25.648v-511.888h-25.648zM588.8 703.952h25.6v-511.888h-25.6z" />
<glyph unicode="&#xe007;" d="M268.88 486.464v-76.848h204.752v-204.752h76.848l-0.016 204.768h204.752v76.848l-204.752-0.016v204.752h-76.848v-204.752h-204.736zM0.048 448.048c0-283.024 228.96-512 512-512 282.944 0 511.904 228.96 511.904 512 0 282.944-228.96 511.904-511.904 511.904-283.040 0-512-228.96-512-511.904zM64.032 448.048c0 247.392 200.528 447.936 448.032 447.936 247.392 0 447.936-200.528 447.936-447.936 0-247.472-200.528-448.032-447.936-448.032-247.504 0.016-448.032 200.544-448.032 448.032z" />
<glyph unicode="&#xe008;" d="M551.856 243.168l136.48 140.816 34.16 35.552 17.040 18.512-179.152 189.152-51.2-52.688 82.496-88.144h-246.016c-28.48 0-51.248-22.72-51.248-51.2s22.768-51.2 51.248-51.2h243.184l-86.8-89.632 49.808-51.168zM512.048-63.952c282.944 0 511.904 228.96 511.904 511.904 0 283.024-228.96 512-511.904 512-283.040 0-512-228.96-512-511.984 0-282.96 228.96-511.92 512-511.92zM512.048 0.032c-247.472 0-448.032 200.528-448.032 447.936 0 247.472 200.528 448.032 448.032 448.032 247.392 0 447.936-200.528 447.936-448.032-0.016-247.408-200.544-447.936-447.936-447.936z" />
<glyph unicode="&#xe009;" d="M716.848 487.808l-140.816 136.528-35.552 34.064-18.512 17.136-189.168-179.168 52.688-51.296 88.144 82.496v-246c0-28.432 22.72-51.2 51.2-51.2s51.2 22.768 51.2 51.2v243.184l89.632-86.704 51.184 49.76zM1023.952 447.968c0 283.024-228.96 512-511.904 512-283.040-0.016-512-228.976-512-512 0-282.944 228.96-511.904 512-511.904 282.944-0.016 511.904 228.944 511.904 511.904zM959.968 447.968c0-247.392-200.528-447.936-447.936-447.936-247.472 0-448.032 200.528-448.032 447.936 0 247.472 200.528 448.032 448.032 448.032 247.408-0.032 447.936-200.56 447.936-448.032z" />
<glyph unicode="&#xe00a;" d="M307.168 408.192l140.816-136.528 35.552-34.064 18.512-17.136 189.152 179.168-52.688 51.296-88.144-82.496v246c0 28.432-22.72 51.2-51.2 51.2s-51.2-22.768-51.2-51.2v-243.184l-89.632 86.704-51.168-49.76zM0.048 448.048c0-283.024 228.96-512 511.904-512 283.024 0 512 228.96 512 512 0 282.944-228.96 511.904-512 511.904-282.944 0-511.904-228.96-511.904-511.904zM64.032 448.048c0 247.392 200.528 447.936 447.936 447.936 247.472 0 448.032-200.528 448.032-447.936 0-247.472-200.528-448.032-448.032-448.032-247.408 0.016-447.936 200.544-447.936 448.032z" />
<glyph unicode="&#xe00b;" d="M472.192 652.848l-136.528-140.816-34.064-35.552-17.136-18.512 179.152-189.152 51.296 52.688-82.496 88.144h246c28.432 0 51.2 22.72 51.2 51.2s-22.768 51.2-51.2 51.2h-243.184l86.704 89.632-49.744 51.168zM512.048 959.952c-283.040 0-512-228.96-512-511.904 0-283.024 228.96-512 512-512 282.944 0 511.904 228.96 511.904 512 0 282.944-228.96 511.904-511.904 511.904zM512.048 895.968c247.392 0 447.936-200.528 447.936-447.936 0-247.472-200.528-448.032-447.936-448.032-247.472 0-448.032 200.528-448.032 448.032 0.016 247.408 200.544 447.936 448.032 447.936z" />
<glyph unicode="&#xe00c;" d="M844.736 115.2l-255.904 255.952-179.248-179.152-76.752 76.8-153.6-153.6 665.504-0.016zM281.632 473.6c0-42.672 34.16-76.848 76.752-76.848 42.72 0 76.848 34.16 76.848 76.848 0 42.592-34.112 76.752-76.848 76.752-42.592 0-76.752-34.16-76.752-76.752zM947.168 703.952v-691.152l-870.336 0.016v691.152l870.336-0.016zM1023.984 959.952h-1023.952v-1023.904h948.528c24.208 0 34.16 8.464 49.76 24.16 17.136 15.648 25.648 38.432 25.648 61.104v938.64z" />
<glyph unicode="&#xe00d;" d="M752.352 878.896c-52.688 51.2-137.952 51.2-190.544-1.392l-479.312-479.312c-52.576-52.592-52.576-137.856-1.392-190.544l17.040-17.040 66.832 68.224-44.064 44.064 536.16 536.192 44.064-44.064 68.224 66.832-17.008 17.040zM254.608 34.144l17.040-17.040c52.688-51.2 137.952-51.2 190.544 1.392l479.312 479.312c52.592 52.592 52.592 137.872 1.392 190.544l-17.040 17.040-66.832-68.224 44.064-44.064-536.16-536.176-44.064 44.064-68.256-66.848zM992.656 950c-12.784 12.832-32.72 12.832-45.504 1.44l-312.848-312.896c-11.392-12.784-11.392-32.672 0-45.456l22.768-22.768c12.784-11.392 32.672-11.392 45.456 0l312.912 312.832c11.392 12.784 11.392 32.72-1.44 45.504l-21.344 21.344zM366.928 325.696c-12.784 11.392-32.672 11.392-45.456 0l-312.912-312.832c-11.392-12.784-11.392-32.72 1.44-45.504l21.344-21.344c12.784-12.832 32.72-12.832 45.504-1.44l312.848 312.896c11.392 12.784 11.392 32.672 0 45.456l-22.768 22.768z" />
<glyph unicode="&#xe00e;" d="M358.384 524.8l-76.752-76.8h76.752v-230.4l-76.752 0.016v-51.152h204.752v51.152h-76.8l-0.016 307.184h-51.184zM588.832 524.8c-28.528 0-51.2-22.768-51.2-51.152v-256.048c0-28.384 22.688-51.152 51.2-51.152h102.4c28.432 0 51.2 22.768 51.2 51.152l-0.016 256.048c0 28.384-22.768 51.152-51.2 51.152h-102.384zM588.832 473.648h102.4v-256.048h-102.4v256.048zM947.168 678.4v-665.552l-870.336 0.016v665.552l870.336-0.016zM1023.984 960h-1023.952v-1024h948.528c24.208 0 34.16 8.56 49.76 24.16 17.136 15.744 25.648 38.432 25.648 61.2v938.64zM755.2 857.568c21.296 0 38.384-17.088 38.384-38.384 0-21.344-17.088-38.432-38.384-38.432-21.344 0-38.432 17.088-38.432 38.432 0.016 21.296 17.088 38.384 38.432 38.384zM243.216 857.568c21.392 0 38.432-17.088 38.432-38.384 0-21.344-17.040-38.432-38.432-38.432-21.296 0-38.432 17.088-38.432 38.432 0 21.296 17.136 38.384 38.432 38.384z" />
<glyph unicode="&#xe00f;" d="M0.080 448c0-49.808 39.776-89.584 91.008-89.584 49.712 0 89.584 39.776 89.584 89.584s-39.856 89.584-89.584 89.584c-51.232 0-91.008-39.776-91.008-89.584zM420.976 448c0-49.808 41.296-89.584 91.056-89.584 49.712 0 90.96 39.776 90.96 89.584s-41.248 89.584-90.96 89.584c-49.76 0-91.056-39.776-91.056-89.584zM843.344 448c0-49.808 39.824-89.584 89.632-89.584 51.2 0 90.96 39.776 90.96 89.584s-39.776 89.584-90.96 89.584c-49.808 0-89.632-39.776-89.632-89.584z" />
<glyph unicode="&#xe010;" d="M305.824 428.8c0-108.096 92.448-196.24 206.144-196.24 113.84 0 206.288 88.144 206.288 196.24 0 46.944-18.512 91.056-49.808 125.136 204.8-46.944 355.536-172.080 355.536-172.080v91.056c0 0-230.4 190.544-509.136 190.544-277.328-0.016-514.8-190.544-514.8-190.544v-91.056c0 0 150.736 120.864 352.704 170.688-28.464-34.176-46.928-76.8-46.928-123.744z" />
<glyph unicode="&#xe011;" d="M294.432 448.048c0-21.392 17.088-38.432 38.384-38.432 21.344 0 38.432 17.040 38.432 38.432 0 21.296-17.088 38.432-38.432 38.432-21.312-0.016-38.384-17.136-38.384-38.432zM473.632 448.048c0-21.392 17.040-38.432 38.432-38.432 21.296 0 38.432 17.040 38.432 38.432 0 21.296-17.136 38.432-38.432 38.432-21.408-0.016-38.432-17.136-38.432-38.432zM652.784 448.048c0-21.392 17.136-38.432 38.432-38.432s38.432 17.040 38.432 38.432c0 21.296-17.136 38.432-38.432 38.432s-38.432-17.136-38.432-38.432zM0.048 448.048c0-283.024 228.96-512 512-512 282.944 0 511.904 228.96 511.904 512 0 282.944-228.96 511.904-511.904 511.904-283.040 0-512-228.96-512-511.904zM64.032 448.048c0 247.392 200.528 447.936 448.032 447.936 247.392 0 447.936-200.528 447.936-447.936 0-247.472-200.528-448.032-447.936-448.032-247.504 0.016-448.032 200.544-448.032 448.032z" />
<glyph unicode="&#xe012;" d="M473.632 716.768v-332.752h281.6v76.8h-204.768v255.952h-76.832zM0.048 448.048c0-283.024 228.96-512 512-512 282.944 0 511.904 228.96 511.904 512 0 282.944-228.96 511.904-511.904 511.904-283.040 0-512-228.96-512-511.904zM64.032 448.048c0 247.392 200.528 447.936 448.032 447.936 247.392 0 447.936-200.528 447.936-447.936 0-247.472-200.528-448.032-447.936-448.032-247.504 0.016-448.032 200.544-448.032 448.032z" />
<glyph unicode="&#xe013;" d="M369.728 658.048l-53.984-53.984 142.208-145.088-143.6-146.48 53.984-55.456 143.6 146.48 143.696-146.48 54.032 55.456-143.6 146.48 142.208 145.088-54.112 53.984-142.208-145.040-142.224 145.040zM156.416 820.208c-199.040-199.104-203.312-524.736-5.632-729.536 199.152-206.24 523.344-206.24 722.448 0 197.664 204.8 193.408 530.432-5.76 729.536-197.568 197.712-513.328 197.712-711.056 0zM200.528 776.096c172.080 172.128 450.8 172.128 622.864 0 173.504-174.896 176.368-460.704 4.304-638.464-173.552-179.248-457.968-179.248-631.392 0-172.096 177.76-169.216 463.568 4.224 638.464z" />
<glyph unicode="&#xe014;" d="M601.616 439.536l154.992 93.792-154.992 95.36v-65.472l-332.736 0.016v-169.248l51.152 46.944v71.104h281.6l-0.016-72.496zM448.032 435.184l-154.992-95.264 154.992-95.264v62.592h332.752v173.504l-51.152-48.384v-73.936l-281.6-0.016v76.768zM0.048 448.048c0-283.024 228.96-512 512-512 282.944 0 511.904 228.96 511.904 512 0 282.944-228.96 511.904-511.904 511.904-283.040 0-512-228.96-512-511.904zM64.032 448.048c0 247.392 200.528 447.936 448.032 447.936 247.392 0 447.936-200.528 447.936-447.936 0-247.472-200.528-448.032-447.936-448.032-247.504 0.016-448.032 200.544-448.032 448.032z" />
<glyph unicode="&#xe015;" d="M281.6 459.44l140.768-136.576 35.552-34.112 18.464-17.088 291.552 281.552-52.592 51.2-240.32-231.776-142.208 136.528-51.216-49.728zM0.048 448.048c0-283.024 228.96-512 511.904-512 283.024 0 512 228.96 512 512 0 282.944-228.96 511.904-512 511.904-282.944 0-511.904-228.96-511.904-511.904zM64.032 448.048c0 247.392 200.528 447.936 447.936 447.936 247.472 0 448.032-200.528 448.032-447.936 0-247.472-200.528-448.032-448.032-448.032-247.408 0.016-447.936 200.544-447.936 448.032z" />
<glyph unicode="&#xe016;" d="M478.752 691.216v-358.352h76.848l-0.016 358.352h-76.832zM478.752 281.664v-76.8h76.848v76.8h-76.848zM5.264 448.048c0-283.024 228.96-512 511.904-512 283.024 0 512 228.96 512 512 0 282.944-228.96 511.904-512 511.904-282.944 0-511.904-228.96-511.904-511.904zM69.248 448.048c0 247.392 200.528 447.936 447.936 447.936 247.472 0 448.032-200.528 448.032-447.936 0-247.472-200.528-448.032-448.032-448.032-247.408 0.016-447.936 200.544-447.936 448.032z" />
<glyph unicode="&#xe017;" d="M0.032 418.192l294.384-290.112 35.552-34.176 18.512-17.088 675.504 665.6-78.224 76.768-598.768-590.144-270.16 264.512z" />
<glyph unicode="&#xe018;" d="M550.384 348.432c91.056 15.648 140.768 76.848 140.768 176.32 0 113.84-65.472 179.2-179.152 179.2-109.536 0-172.128-59.712-179.248-166.368h51.264c7.072 78.224 46.944 115.168 128 115.168 85.312 0 127.952-42.672 127.952-128 0-71.104-28.432-110.88-89.584-123.744v8.512l-76.8-25.552v-76.752h76.8l0.016 41.216zM473.6 256.016v-76.8h76.8v76.8h-76.8zM0.016 447.968c0-282.944 228.96-511.904 512-511.904 282.944 0 511.952 228.96 511.952 511.904 0 283.024-229.008 511.984-511.952 511.984-283.040 0-512-228.96-512-511.984zM64.048 447.968c0 247.472 200.48 448 447.968 448 247.392 0 447.936-200.528 447.936-448.032 0-247.392-200.528-447.936-447.936-447.936-247.488 0.032-447.968 200.56-447.968 447.968z" />
<glyph unicode="&#xe019;" d="M664.16 192.048c8.56 0 14.256 1.392 19.904 5.696-9.952 2.784-18.512 7.072-24.16 12.784-12.784 14.256-19.904 34.064-19.904 51.2v510.512c0 17.040 7.12 27.040 19.904 41.2 12.832 12.864 38.384 18.56 55.456 18.56h1.392l0.016 68.288c0 16.992-5.648 32.672-18.464 45.456-12.8 12.768-17.104 14.256-34.144 14.256h-588.736c-17.104 0-42.656-5.728-55.472-18.512-12.784-14.208-19.904-24.208-19.904-41.2v-638.56c0-17.136 7.12-36.944 19.904-51.2 12.832-12.784 38.384-18.464 55.456-18.464h588.752zM716.752 268.848v486.352l230.4-51.248-0.016-435.104h-230.384zM971.312 780.752l-254.56 51.248h-1.376c-17.088 0-42.624-5.696-55.456-18.56-12.784-14.16-19.904-24.16-19.904-41.2v-510.528c0-17.136 7.12-36.944 19.904-51.2 5.648-5.696 14.208-10 24.16-12.784 10-4.304 21.392-5.696 31.28-5.696h255.952c17.088 0 21.392 5.696 34.16 18.464 12.784 14.256 18.464 34.064 18.464 51.2v459.344c0 17.088-5.696 32.672-18.464 45.552-12.768 12.768-17.072 14.16-34.16 14.16zM76.8 25.632c0-49.712 39.856-89.632 89.632-89.632 49.808 0 89.632 39.904 89.632 89.632 0 49.76-39.824 89.632-89.632 89.632-49.776-0.016-89.632-39.872-89.632-89.632zM768 25.632c0-49.712 39.776-89.632 89.584-89.632s89.584 39.904 89.584 89.632c0 49.76-39.776 89.632-89.584 89.632s-89.584-39.872-89.584-89.632z" />
<glyph unicode="&#xe01a;" d="M640 883.152v-110.928c0 17.040 7.12 27.040 19.904 41.2 12.832 12.864 38.384 18.56 55.456 18.56h1.392l0.016 68.304c0 16.992-5.648 32.672-18.464 45.456-12.8 12.768-17.104 14.256-34.144 14.256h-588.736c-17.104 0-42.656-5.728-55.472-18.512-12.784-14.208-19.904-24.208-19.904-41.2v-638.56c0-17.136 7.12-36.944 19.904-51.2 12.832-12.784 38.384-18.464 55.456-18.464h588.752c8.56 0 14.256 1.392 19.904 5.696 10-4.304 21.392-5.696 31.28-5.696h255.952c17.088 0 21.392 5.696 34.16 18.464 12.784 14.256 18.464 34.064 18.464 51.2l0.032 459.312c0 17.088-5.696 32.672-18.464 45.552-12.784 12.784-17.088 14.16-34.16 14.16l-254.56 51.248h-1.392c-17.088 0-42.624-5.696-55.456-18.56-12.784-14.16-19.904-24.16-19.904-41.2l-0.016-503.392h-563.2v614.304h563.2zM716.752 268.848v486.352l230.4-51.248-0.016-435.104h-230.384zM76.8 25.632c0-49.712 39.856-89.632 89.632-89.632 49.808 0 89.632 39.904 89.632 89.632 0 49.76-39.824 89.632-89.632 89.632-49.776-0.016-89.632-39.872-89.632-89.632zM768 25.632c0-49.712 39.776-89.632 89.584-89.632s89.584 39.904 89.584 89.632c0 49.76-39.776 89.632-89.584 89.632s-89.584-39.872-89.584-89.632z" />
<glyph unicode="&#xe01b;" d="M568.896 819.232h-18.432v-81.056c11.296-12.832 16.992 5.696 25.552-15.696v-49.712c0-7.12 10-11.392 14.208-11.392 25.6 0 91.056 68.224 113.744 85.264-44.016 39.856-90.96 58.32-135.072 72.592zM473.632 819.232h-24.16c-76.752-17.136-163.6-54.064-231.84-160.736v-7.12c4.304 2.88 14.256 5.696 17.088 5.696 7.072 0 7.072-2.832 8.56-5.696v-55.408c0-12.832 34.064-103.824 49.76-108.096 8.56-2.88 17.088 1.44 22.72-4.272 17.040-19.904 22.768-49.808 36.992-68.224 21.344-28.528 54.032-59.808 82.496-71.104 9.952-7.168 29.872 4.224 38.384-11.392v-89.632c0-18.512 34.112 4.272 34.112-29.904v-9.904c-4.224-18.512-25.552 2.832-34.112-18.512v-150.736c4.272-8.512 24.16-8.512 34.112-8.512 0 0 39.856-2.88 39.856 14.208 0 19.952-22.768 11.392-28.48 12.784 22.768 26.992 44.112 56.896 69.712 81.104 36.944 34.112 46.896 72.496 61.104 100.976 5.696 12.784 14.208 32.672 14.208 36.944 0 29.872-115.168 83.888-122.256 86.752h-78.272c-24.16 11.392-51.152 36.992-66.768 63.984v56.896l5.648 7.168h39.824l5.696-7.168v-55.408c1.44-4.304 14.208-11.392 18.464-11.392 5.696 0 2.88 7.072 7.12 11.392v99.488c0 15.6 35.552 36.992 39.824 39.824h55.472c4.272 0 21.344 4.272 21.344 14.16 0 21.392-29.872-5.648-39.776 5.728v54.064c0 21.296-28.528 14.16-34.16 17.040 14.208 25.6 28.432 36.992 28.432 54.064 0 7.072-2.832 9.904-5.648 11.296-10 2.88-22.768 0-31.328 7.168-9.952 7.072-32.72 18.464-34.112 35.552v56.928zM0.048 448.048c0-283.024 228.96-512 512-512 282.944 0 511.904 228.96 511.904 512 0 282.944-228.96 511.904-511.904 511.904-283.040 0-512-228.96-512-511.904zM64.032 448.048c0 247.392 200.528 447.936 448.032 447.936 247.392 0 447.936-200.528 447.936-447.936 0-247.472-200.528-448.032-447.936-448.032-247.504 0.016-448.032 200.544-448.032 448.032z" />
<glyph unicode="&#xe01c;" d="M0.048 338.48c14.16-63.984 39.824-125.088 75.376-179.152 41.248 14.16 88.192 5.648 120.912-27.040 32.672-32.72 41.2-79.616 26.992-120.816 54.032-35.552 115.216-61.2 179.152-75.456 17.088 44.112 59.76 75.456 109.488 75.456 49.808 0 92.496-31.328 109.536-75.456 64.032 14.256 125.184 39.904 179.248 75.456-14.256 41.2-5.728 88.096 26.992 120.816 32.72 32.672 79.664 41.2 120.864 27.040 35.552 54.064 61.104 115.168 75.376 179.152-44.064 17.136-75.376 59.712-75.376 109.536s31.28 92.4 75.376 109.536c-14.256 63.984-39.824 125.088-75.376 179.152-41.2-14.16-88.144-5.648-120.864 27.040-32.72 32.72-41.248 79.616-26.992 120.816-54.096 35.536-115.248 61.184-179.28 75.44-17.040-44.112-59.712-75.456-109.536-75.456-49.712 0-92.4 31.328-109.488 75.456-63.936-14.256-125.136-39.904-179.152-75.456 14.208-41.2 5.696-88.096-26.992-120.816-32.72-32.672-79.664-41.2-120.912-27.040-35.52-54.080-61.184-115.184-75.344-179.168 44.064-17.136 75.376-59.712 75.376-109.536s-31.312-92.384-75.376-109.504zM153.6 448c0 197.68 160.784 358.4 358.352 358.4 197.728 0 358.4-160.736 358.4-358.4s-160.688-358.4-358.4-358.4c-197.568 0-358.352 160.736-358.352 358.4z" />
<glyph unicode="&#xe01d;" d="M204.848 655.616v149.312c-1.488 21.392-10 38.432-25.648 54.064-15.6 15.648-45.456 24.16-69.616 24.16h-35.552c-22.768 0-32.768-11.392-49.808-26.992-14.224-14.208-22.784-29.856-24.176-49.76h128v-531.904c0-22.72 8.56-42.672 25.552-58.272 17.088-15.696 46.944-24.16 69.712-24.16h476.384c22.72 0 32.72 11.344 49.808 26.992 14.16 14.256 22.688 29.904 24.16 49.808h-568.848v78.192c7.072-1.44 12.784-1.44 18.464-1.44h520.512c24.16 0 95.264 12.832 112.352 29.904 17.040 15.648 28.432 31.248 39.824 55.408l127.952 294.432c0 22.72-9.904 42.624-27.040 58.272-17.040 15.648-26.992 22.768-49.76 22.768h-723.808c-5.696 0-11.392 0-18.464-1.488v-75.376h742.304l-128-307.2-614.304 0.016v233.264zM614.4 76.816c0-35.552 28.48-63.984 64.032-63.984s63.984 28.432 63.984 63.984-28.432 63.984-63.984 63.984-64.032-28.432-64.032-63.984zM102.448 76.816c0-35.552 28.432-63.984 63.984-63.984s63.984 28.432 63.984 63.984-28.432 63.984-63.984 63.984-63.984-28.432-63.984-63.984z" />
<glyph unicode="&#xe01e;" d="M665.552 217.616h-255.904v76.8h255.904v-76.8zM358.448 217.616h-179.248v76.8h179.248v-76.8zM947.136 575.952h-870.336v-460.704h870.352l-0.016 460.704zM947.136 780.752h-870.336v-127.952h870.352l-0.016 127.952zM947.136 857.568c22.768 0 32.72-7.072 49.76-22.72 17.136-15.648 27.040-35.552 27.040-58.32v-652.736c0-22.768-8.512-45.552-25.552-61.152-15.696-15.6-25.648-24.16-49.808-24.16h-853.264c-22.768 0-52.592 8.56-69.712 24.16-17.040 15.568-25.552 38.352-25.552 61.12v652.736c0 22.768 8.512 41.296 25.552 56.896 15.648 15.6 46.944 24.16 69.712 24.16h851.824z" />
<glyph unicode="&#xe01f;" d="M819.2 166.448h-76.8v435.152h76.8v-435.152zM639.952 166.448h-76.752v332.752h76.752v-332.752zM460.8 166.448h-76.752v511.952h76.752v-511.952zM281.6 166.448h-76.8v204.752h76.8v-204.752zM947.136 806.4h-870.288v-716.8h870.304l-0.016 716.8zM971.312 883.152c17.136 0 21.344-1.44 34.16-14.208 12.784-12.784 18.512-28.48 18.512-45.504v-740.88c0-17.136-5.728-37.040-18.512-51.296-12.832-12.784-17.040-18.432-34.16-18.432l-895.856 0.032c-17.136 0-42.72 5.648-55.504 18.432-12.784 14.256-19.952 34.16-19.952 51.296l-0.016 740.832c0 17.040 7.168 27.040 19.952 41.296 12.784 12.784 38.384 18.432 55.504 18.432l895.872-0.016z" />
<glyph unicode="&#xe020;" d="M511.968 934.4l157.904-321.456 354.048-51.152-255.904-248.864 59.712-351.328-315.76 164.992-315.664-164.992 59.712 351.328-255.952 248.864 354.096 51.152z" />
<glyph unicode="&#xe021;" d="M512.048 936.96l-157.952-321.456-354.048-51.2 255.952-248.864-59.712-351.184 315.76 164.896 315.632-164.896-59.712 351.184 256 248.864-354.096 51.2-157.824 321.456zM512.048 794.752l117.952-236.080 265.952-38.432-191.968-183.456 45.552-258.832-237.472 122.304-237.568-122.304 45.552 258.832-192.048 183.456 266 38.432 118.048 236.080z" />
<glyph unicode="&#xe022;" d="M511.936 955.696l-422.288-418.064h844.704l-422.416 418.064zM89.648 358.432l422.288-418.112 422.416 418.112h-844.704z" />
<glyph unicode="&#xe023;" d="M1023.952 729.552c0 28.528-27.040 51.2-59.712 51.2h-34.16c-32.672 0-59.712-22.688-59.712-51.2v-793.552h153.6v793.552zM588.8 908.8c0 28.432-27.040 51.2-59.728 51.2h-34.112c-32.72 0-59.76-22.768-59.76-51.2v-972.784h153.6v972.784zM153.6 499.2c0 28.432-26.992 51.2-59.712 51.2h-34.128c-32.672 0-59.712-22.768-59.712-51.2v-563.2h153.552v563.2z" />
<glyph unicode="&#xe024;" d="M268.832 824.832c-157.856-157.856-177.76-401.088-55.504-573.104l-5.696-4.272-184.864-186.256c-29.872-28.528-29.872-75.376-1.44-103.824s75.376-28.48 103.776 1.392l186.288 184.944 4.352 5.648c172.032-122.304 415.248-102.4 573.056 55.456 176.368 174.896 180.592 457.92 8.56 628.608-170.704 172.048-453.648 167.744-628.528-8.592zM329.936 763.68c140.816 140.816 366.928 143.648 503.376 5.696 138-136.528 135.184-362.608-5.648-503.424-140.768-140.768-366.88-143.6-503.376-5.696-137.952 136.512-135.136 362.656 5.648 503.424z" />
<glyph unicode="&#xe025;" d="M411.088 628.672c-65.424-65.472-75.408-164.976-29.872-241.84-1.488-1.392-2.88-2.832-4.304-4.224l-69.664-69.712c-19.904-18.464-19.904-49.76 0-69.664s51.2-19.904 69.664 0l69.712 69.664c1.392 1.44 2.832 2.832 4.224 4.304 76.848-45.552 176.368-35.552 241.84 29.872 76.752 76.8 76.752 201.92-1.488 280.128-78.192 78.24-203.328 78.24-280.112 1.472zM455.104 584.56c52.64 52.64 139.424 52.64 192.016-1.44 54.064-52.592 54.064-139.376 1.44-192.016-52.64-54.032-139.376-52.592-193.456 0-52.576 54.080-54.016 140.832 0 193.456zM0.048 448.048c0-283.024 228.96-512 512-512 282.944 0 511.904 228.96 511.904 512 0 282.944-228.96 511.904-511.904 511.904-283.040 0-512-228.96-512-511.904zM64.032 448.048c0 247.392 200.528 447.936 448.032 447.936 247.392 0 447.936-200.528 447.936-447.936 0-247.472-200.528-448.032-447.936-448.032-247.504 0.016-448.032 200.544-448.032 448.032z" />
<glyph unicode="&#xe026;" d="M611.568 492.080c0 51.2-29.904 122.304-112.4 122.304s-112.304-56.848-112.304-118.048c0-32.672 15.6-99.536 41.2-127.952 4.272-4.272 29.904-22.768 29.904-32.72 0-14.208-4.272-9.952-9.952-14.208-31.328-71.104-230.4-41.296-230.4-163.552 0-14.208 18.464-28.48 18.464-42.624h557.456v69.616c0 99.632-214.704 65.472-246.048 150.768 56.96 66.88 64.080 99.568 64.080 156.416zM947.136 703.952v-691.104l-870.336 0.016v691.088h870.336zM1023.952 960h-1023.904v-1024h948.528c24.16 0 34.112 8.56 49.808 24.16 17.040 15.744 25.552 38.432 25.552 61.2v938.64z" />
<glyph unicode="&#xe027;" d="M947.136 608.688v-595.84l-819.088 0.016v-76.848h824.8c21.296 0 35.552 7.168 49.808 21.344 14.208 14.208 21.296 34.16 21.296 52.64v822h-76.8v-223.312zM819.152 729.552v-588.752h-742.352v588.752h742.352zM896 960h-895.952v-896h824.848c21.296 0 29.824 7.168 44.064 21.392 14.256 14.16 27.040 38.384 27.040 58.272v816.336z" />
<glyph unicode="&#xe028;" d="M947.136 703.952h-870.336v-691.104h870.352l-0.016 691.104zM1023.952 960v-938.624c0-22.768-8.512-45.456-25.552-61.2-15.696-15.6-25.648-24.16-49.808-24.16h-948.544v1023.984h1023.904z" />
<glyph unicode="&#xe029;" d="M989.856 533.408l-416.736 379.696c-45.456 58.32-92.4 58.32-137.952 0v-237.472h-356.912c-42.624 0-78.192-42.672-78.192-96.752v-268.784c0-52.592 34.112-95.264 76.8-95.264h358.304v-226.096c45.552-56.848 92.496-69.712 137.952-12.784l416.72 381.072c45.472 58.336 45.472 118.064 0.016 176.384zM76.864 445.232v153.6h435.104v255.952l460.8-409.552-460.8-409.552v255.936h-435.104v153.616z" />
<glyph unicode="&#xe02a;" d="M426.624 925.824l-379.792-418.112c-58.24-44.064-58.24-91.008 0-136.48h237.568v-356.912c0-42.72 42.592-78.272 96.656-78.272h268.784c52.64 0 95.264 34.16 95.264 76.8v358.384h226.096c56.944 45.456 69.712 92.4 12.864 136.48l-381.168 418.112c-58.32 45.552-118.032 45.552-176.272 0zM514.704 12.848h-153.552v435.152h-256l409.552 460.784 409.648-460.8-256.032 0.016v-435.152h-153.616z" />
<glyph unicode="&#xe02b;" d="M230.4 588.752v-76.752h307.2v76.752h-307.2zM332.8 435.152v-127.952h460.752v127.952h-460.752zM947.136 793.552v-691.152h-870.336v691.152h870.336zM971.312 870.336h-895.888c-17.088 0-42.624-5.696-55.456-18.464-12.8-14.256-19.92-24.16-19.92-41.248v-715.264c0-17.136 7.12-37.040 19.904-51.296 12.832-12.784 38.384-18.432 55.456-18.432h895.904c17.088 0 21.392 5.648 34.16 18.432 12.784 14.256 18.464 34.16 18.464 51.296l0.016 715.264c0 17.088-5.696 32.72-18.464 45.504-12.784 12.832-17.088 14.208-34.176 14.208z" />
<glyph unicode="&#xe02c;" d="M947.136 89.6h-870.336v793.552h-1.376c-17.088 0-42.624-5.648-55.456-18.432-12.8-14.256-19.92-24.24-19.92-41.296v-740.88c0-17.136 7.12-37.040 19.904-51.296 12.832-12.784 38.384-18.432 55.456-18.432h895.904c17.088 0 21.392 5.648 34.16 18.432 12.784 14.256 18.464 34.16 18.464 51.296v7.024l-76.8 0.016zM870.352 371.2c0-42.624 34.16-76.8 76.8-76.8 42.72 0 76.8 34.16 76.8 76.8s-34.064 76.8-76.8 76.8c-42.64 0-76.8-34.16-76.8-76.8zM908.784 371.2c0 21.344 17.040 38.384 38.384 38.384s38.384-17.040 38.384-38.384-17.040-38.384-38.384-38.384-38.384 17.056-38.384 38.384zM520.512 642.848c12.832-24.16 38.384-41.248 68.272-41.248 31.28 0 56.848 18.464 69.712 44.064 130.816-28.432 199.072-137.952 233.232-221.84 9.904 11.392 25.552 19.904 41.2 22.768-36.944 82.4-119.44 214.704-268.784 248.864-8.512 34.064-38.384 59.712-75.376 59.712-36.944 0-68.272-27.040-75.376-61.2-170.688-49.76-251.744-258.784-278.736-351.264-32.72-9.904-55.504-38.336-55.504-73.888 0-42.672 34.16-76.8 76.848-76.8 42.592 0 76.752 34.112 76.752 76.8 0 29.872-17.040 55.408-42.672 68.224 31.328 106.704 99.616 264.56 230.432 305.808zM550.368 678.4c0 21.344 17.088 38.384 38.432 38.384 21.296 0 38.384-17.040 38.384-38.384s-17.088-38.384-38.384-38.384c-21.344 0.016-38.432 17.040-38.432 38.384zM217.632 268.848c0 21.296 17.088 38.336 38.432 38.336 21.296 0 38.384-17.040 38.384-38.336 0-21.392-17.088-38.432-38.384-38.432-21.344 0.016-38.432 17.040-38.432 38.432z" />
<glyph unicode="&#xe02d;" d="M947.136 752.32v-662.72h-870.336v662.72l386.816-386.816c27.040-27.040 69.712-27.040 96.752 0l386.768 386.816zM119.488 806.4h785.024l-359.824-361.264c-18.464-17.040-46.896-17.040-65.424 0l-359.776 361.264zM971.312 883.152h-895.888c-17.088 0-42.624-5.648-55.456-18.432-12.8-14.256-19.92-24.24-19.92-41.296v-740.88c0-17.136 7.12-37.040 19.904-51.296 12.832-12.784 38.384-18.432 55.456-18.432h895.904c17.088 0 21.392 5.648 34.16 18.432 12.784 14.256 18.464 34.16 18.464 51.296l0.016 740.88c0 17.040-5.696 32.72-18.464 45.504s-17.088 14.224-34.176 14.224z" />
<glyph unicode="&#xe02e;" d="M597.232-29.84l379.696 416.624c58.32 45.552 58.32 92.496 0 138h-237.488v356.944c0 42.72-42.688 78.272-95.264 78.272h-268.832c-54.032 0-96.656-34.16-96.656-76.848v-358.352h-224.704c-58.32-45.504-71.104-92.448-12.832-138l379.728-416.624c58.288-45.552 118.016-45.552 176.352-0.016zM508.992 883.152h153.6v-435.152h256.048l-409.648-460.784-409.504 460.784h256v435.152h153.504z" />
<glyph unicode="&#xe02f;" d="M34.16 362.768l416.672-379.696c45.504-58.32 92.448-58.32 137.952 0v237.472h356.96c42.624 0 78.192 42.72 78.192 96.704v267.392c0 53.984-34.064 96.704-76.8 96.704h-358.336v224.704c-45.504 58.272-92.448 71.104-137.952 12.784l-416.688-379.696c-45.504-58.32-45.504-118.032 0-176.368zM947.136 450.944v-153.6h-435.184v-255.952l-460.704 409.552 460.704 409.552v-255.952h435.2l-0.016-153.6z" />
<glyph unicode="&#xe030;" d="M943.632 883.184v-229.008l76.8-56.848v302.848c0 17.136-5.696 32.72-18.512 45.552-12.784 12.784-17.040 14.256-34.112 14.256h-896c-16.992 0-42.592-5.696-55.36-18.512-12.88-14.256-19.968-24.16-19.968-41.296v-894.464c0-17.040 7.072-36.944 19.952-51.2 12.784-12.784 38.384-18.464 55.36-18.464h896c17.088 0 21.344 5.696 34.112 18.464 12.832 14.256 18.512 34.16 18.512 51.2l0.016 292.944-76.8-56.848v-228.96h-870.352v870.336h870.352zM278.080 396.784h460.704v-128.016l288.72 179.2-288.72 179.184v-127.968h-358.304c-66.848 0-102.4-35.552-102.4-102.4z" />
<glyph unicode="&#xe031;" d="M922.288 332.832c2.88 8.512 4.272 17.040 5.696 25.6l-75.408 18.464c-1.392-8.512-2.88-17.088-5.696-24.16-52.544-206.24-263.024-331.376-469.264-278.736-204.8 54.032-329.872 264.48-275.904 469.28 52.688 206.224 263.12 331.36 469.312 277.344 115.168-28.48 204.752-108.096 251.696-209.104l-110.88-65.376c-2.88-14.256 4.224-28.432 18.432-31.28l199.104-51.2c14.208-2.88 28.48 4.272 31.328 18.512l51.152 199.072c2.832 14.256-4.224 28.432-18.464 31.28l-103.776-61.104c-56.896 116.56-163.552 208.976-300.064 244.528-247.488 64.048-499.232-85.344-563.216-332.768-63.968-247.472 85.312-499.184 332.816-563.104 247.424-64.080 499.104 85.312 563.136 332.752z" />
<glyph unicode="&#xe032;" d="M48.384 857.568c-26.992 0-48.336-21.36-48.336-46.96v-8.464c0-25.648 21.344-46.944 48.336-46.944h927.232c27.040 0 48.336 21.296 48.336 46.944v8.464c0 25.6-21.296 46.944-48.336 46.944l-927.232 0.016zM48.384 499.2c-26.992 0-48.336-21.344-48.336-46.944v-8.512c0-25.6 21.344-46.944 48.336-46.944h927.232c27.040 0 48.336 21.344 48.336 46.944v8.512c0 25.6-21.296 46.944-48.336 46.944h-927.232zM48.384 140.8c-26.992 0-48.336-21.28-48.336-46.928v-8.464c0-25.6 21.344-46.944 48.336-46.944l927.232-0.016c27.040 0 48.336 21.344 48.336 46.944v8.464c0 25.648-21.296 46.944-48.336 46.944l-927.232 0.016z" />
<glyph unicode="&#xe033;" d="M512.048 959.952c-283.024 0-512-228.96-512-511.904 0-283.024 228.96-512 512-512 282.944 0 511.904 228.96 511.904 512 0 282.944-228.96 511.904-511.904 511.904zM512.064 0.032c-247.488 0-448.032 200.528-448.032 448.032 0 247.376 200.528 447.936 448.032 447.936 247.408 0 447.936-200.528 447.936-447.936 0-247.488-200.528-448.032-447.936-448.032zM268.512 486.4v-76.784h487.008v76.784h-204.752z" />
<glyph unicode="&#xe034;" d="M307.2 780.56v-153.616h51.248v153.616h-51.248zM230.4 780.56v-153.616h25.648v153.616h-25.648zM435.2 780.56v-153.616h128.048v153.616h-128.048zM179.2 780.56v-153.616h25.648v153.616h-25.648zM819.152 780.56v-153.616h25.648v153.616h-25.648zM742.368 780.56v-153.616h25.616v153.616h-25.616zM614.4 780.56v-153.616h51.152v153.616h-51.152zM947.136 882.96v-358.352l-870.336-0.016v358.368h870.336zM971.312 959.792h-895.888c-17.088 0-42.624-5.728-55.456-18.512-12.8-14.208-19.92-24.208-19.92-41.2v-382.56c0-17.088 7.12-37.040 19.904-51.248 12.832-12.784 38.384-18.464 55.456-18.464h895.904c17.088 0 21.392 5.696 34.16 18.464 12.784 14.208 18.464 34.16 18.464 51.248l0.016 382.56c0 16.992-5.696 32.672-18.464 45.456-12.784 12.784-17.088 14.256-34.176 14.256zM707.648 157.968l-160.688 143.712c-18.464 22.752-36.992 22.752-55.52 0v-102.4l-143.6 0.016c-15.632 0-35.552-15.632-35.552-36.944v-79.664c0-21.36 14.16-36.992 31.28-36.992h147.84v-85.264c18.512-21.392 37.056-35.552 55.52-12.848l160.704 143.664c18.48 21.28 18.48 45.44 0.016 66.72z" />
<glyph unicode="&#xe035;" d="M571.664 837.952h193.632l-210.112-226.96c-26.736-26.72-23.472-80.064 6.64-113.488 29.968-30.064 70.096-33.296 100.048-6.624l210.24 226.848v-180.128h120.256v420.512h-420.704v-120.16zM452.256 386.448c-30.176 30.080-66.944 33.36-93.632 3.376l-206.736-220.32v186.976h-120.272v-420.48h420.672v120.080h-203.584l210.208 223.568c26.704 26.736 23.36 73.504-6.656 106.8z" />
<glyph unicode="&#xe036;" d="M66.272 303.072h193.632l-210.128-226.96c-26.736-26.72-23.472-80.064 6.656-113.472 29.968-30.080 70.080-33.312 100.032-6.624l210.24 226.848v-180.128h120.256v420.496h-420.688v-120.16zM967.616 933.84c-30.192 30.080-66.96 33.36-93.648 3.36l-206.736-220.304v186.976h-120.256v-420.48h420.672v120.064l-203.616-0.016 210.224 223.584c26.72 26.736 23.36 73.52-6.64 106.816z" />
<glyph unicode="&#xe037;" d="M251.488-54.704c-32.48 0-63.040 12.528-86.192 35.264l-127.744 112.304c-47.936 47.936-47.936 125.936 0 173.872l84.224 84.272c23.248 23.232 54.128 36 86.96 36 32.848 0 63.712-12.784 86.928-35.984-0.016 0.032-0.032 0.032-0.032 0.032 0.144 0 8.352-6.448 20.32-6.448 12.592 0 21.040 7.152 21.408 7.456l264.448 264.512c-0.016-0.016-0.032-0.032-0.048-0.032-0.112 0 6.464 8.256 6.464 20.32 0 7.664-2.688 13.824-4.928 17.6l-2.080 2.080c-47.936 47.936-47.936 125.936 0 173.872l84.272 84.272c23.216 23.216 54.080 36.016 86.928 36.016 32.48 0 63.040-12.512 86.192-35.264l127.76-112.304c23.248-23.232 36.032-54.112 36.032-86.944s-12.8-63.728-36.032-86.944l-647.92-647.936c-23.232-23.216-54.096-36.016-86.96-36.016zM80.624 137.2l127.632-112.208c23.136-23.12 63.392-23.104 86.512 0l647.936 647.936c11.552 11.552 17.92 26.928 17.92 43.248 0 16.016-6.128 31.136-17.28 42.608l-127.632 112.208c-23.152 23.12-63.392 23.104-86.512 0.016l-84.256-84.272c-11.552-11.552-17.936-26.912-17.936-43.248s6.368-31.696 17.936-43.248l8.048-8.768c7.76-11.312 17.056-29.952 17.072-54.576 0-37.024-21.472-60.8-23.92-63.376l-266.224-266.208c-3.216-3.056-27.008-24.496-63.984-24.496-36.992 0-60.752 21.424-63.328 23.872-12.176 12.176-27.536 18.528-43.872 18.528s-31.712-6.368-43.264-17.936l-84.24-84.24c-23.616-23.616-23.824-61.936-0.608-85.84z" />
<glyph unicode="&#xe038;" d="M1023.952 0.064h-1023.904v29.808c0 12.192 0.448 24.448 0.912 36.688 0.432 11.52 0.88 23.040 0.88 34.56 0 142.928 134.192 179.824 242.016 209.456 67.552 18.56 131.376 36.112 149.376 72.064 3.072 6.112 6.24 12.912 8.64 18.208-3.696 5.024-12.592 14.624-20.592 23.264-4.336 4.672-9.088 9.776-14.192 15.472-24.784 27.456-82.4 104.56-82.4 227.152 0 140.080 83.328 227.088 217.488 227.088 142.896 0 217.632-117.808 217.632-234.208 0-98.752-14.48-159.616-101.472-265.52 28.288-41.776 104.72-60.88 178.88-79.424 106.256-26.576 226.72-56.688 226.72-168.432v-146.176zM60.352 59.648h903.984v86.576c0 60.816-68.592 82.336-181.552 110.592-97.264 24.336-197.808 49.472-227.808 131.104l-6 16.336 11.28 13.248c90.944 106.832 99.952 153.52 99.952 242.112 0 60.4-33.024 174.608-158.032 174.608-137.376 0-157.872-104.944-157.872-167.488 0-101.92 46.88-164.896 67.056-187.248 4.896-5.44 9.488-10.368 13.632-14.848 22.16-23.872 38.144-41.12 38.144-66.432v-6.208l-2.464-5.696c0 0-7.296-16.784-14.144-30.4-29.904-59.648-106.144-80.624-186.864-102.816-119.744-32.912-198.208-61.28-198.208-151.984 0-12.24-0.464-24.544-0.928-36.8-0.064-1.568-0.112-3.104-0.176-4.656z" />
<glyph unicode="&#xe039;" d="M5.264 448.048c0-283.024 228.96-512 511.904-512 283.024 0 512 228.96 512 512 0 282.928-228.96 511.904-512 511.904-282.944 0-511.904-228.96-511.904-511.904zM69.248 448.048c0 247.376 200.528 447.936 447.936 447.936 247.488 0 448.032-200.528 448.032-447.936 0-247.472-200.528-448.032-448.032-448.032-247.408 0.016-447.936 200.544-447.936 448.032z" />
<glyph unicode="&#xe03a;" d="M1023.952 0.064h-1023.904v29.808c0 12.192 0.448 24.448 0.912 36.688 0.432 11.52 0.88 23.040 0.88 34.56 0 142.928 134.192 179.824 242.016 209.456 67.552 18.56 131.376 36.112 149.376 72.064 3.072 6.112 6.24 12.912 8.64 18.208-3.696 5.024-12.592 14.624-20.592 23.264-4.336 4.672-9.088 9.776-14.192 15.472-24.784 27.456-82.4 104.56-82.4 227.152 0 140.080 83.328 227.088 217.488 227.088 142.896 0 217.632-117.808 217.632-234.208 0-98.752-14.48-159.616-101.472-265.52 28.288-41.776 104.72-60.88 178.88-79.424 106.256-26.576 226.72-56.688 226.72-168.432v-146.176z" />
<glyph unicode="&#xe03b;" d="M251.488-54.704c-32.48 0-63.040 12.528-86.192 35.264l-127.744 112.304c-47.936 47.936-47.936 125.936 0 173.872l84.224 84.272c23.248 23.232 54.128 36 86.96 36 32.848 0 63.712-12.784 86.928-35.984-0.016 0.032-0.032 0.032-0.032 0.032 0.144 0 8.352-6.448 20.32-6.448 12.592 0 21.040 7.152 21.408 7.456l264.448 264.512c-0.016-0.016-0.032-0.032-0.048-0.032-0.112 0 6.464 8.256 6.464 20.32 0 7.664-2.688 13.824-4.928 17.6l-2.080 2.080c-47.936 47.936-47.936 125.936 0 173.872l84.272 84.272c23.216 23.216 54.080 36.016 86.928 36.016 32.48 0 63.040-12.512 86.192-35.264l127.76-112.304c23.248-23.232 36.032-54.112 36.032-86.944s-12.8-63.728-36.032-86.944l-647.92-647.936c-23.232-23.216-54.096-36.016-86.96-36.016z" />
<glyph unicode="&#xe03c;" d="M5.264 448.048c0-283.024 228.96-512 511.904-512 283.024 0 512 228.96 512 512 0 282.928-228.96 511.904-512 511.904-282.944 0-511.904-228.96-511.904-511.904z" />
<glyph unicode="&#xe03d;" d="M612.192 533.664c0 6.896-3.136 51.6-28 51.6-37.36 0-46.704-72.256-46.704-82.624 0-3.408 3.152-58.496 28.032-58.496 34.192 0.032 46.672 72.288 46.672 89.52zM814.384 533.664c0 6.896-3.152 51.6-28.032 51.6-37.28 0-46.608-72.256-46.608-82.624 0-3.408 3.072-58.496 27.952-58.496 34.192 0.032 46.688 72.288 46.688 89.52zM141.296 959.232c-68.224 0-123.504-55.488-123.504-123.92v-650.72c0-68.432 55.296-123.92 123.504-123.92h339.808l123.504-123.936v123.936h278.048c68.224 0 123.52 55.472 123.52 123.92v650.72c0 68.432-55.296 123.92-123.52 123.92h-741.36zM668.16 537.072c0-55.088-31.088-154.88-102.64-154.88-6.208 0-18.496 3.616-25.424 6.016-32.512 11.168-50.192 49.696-52.352 66.256 0 0-3.072 17.792-3.072 40.752 0 22.992 3.072 45.328 3.072 45.328 15.552 75.728 43.552 106.736 96.448 106.736 59.072 0.032 83.968-58.528 83.968-110.208zM486.496 657.6c0-3.392-43.552-141.168-43.552-213.424v-75.712c-2.592-12.080-4.16-24.144-21.824-24.144-46.608 0-88.88 151.472-92.016 161.84-6.208-6.896-62.24-161.84-96.448-161.84-24.864 0-43.552 113.648-46.608 123.936-9.344 55.072-26.048 157.52-26.048 164.416 0 20.672 1.152 38.736 26.048 38.736 6.208 0 21.6-6.064 23.712-17.168 11.648-62.032 16.688-120.512 29.168-185.968 1.856-2.928 1.504-7.008 4.56-10.432 3.152 10.288 66.928 168.784 94.96 168.784 22.544 0 30.4-44.592 33.536-61.824 6.208-20.656 13.088-55.216 22.416-82.752 0 13.776 12.48 203.12 65.392 203.12 18.592-0.032 26.704-6.928 26.704-27.568zM870.32 537.072c0-55.088-31.088-154.88-102.64-154.88-6.192 0-18.448 3.616-25.424 6.016-32.432 11.168-50.176 49.696-52.288 66.256 0 0-3.888 17.92-3.888 40.896s3.888 45.184 3.888 45.184c15.552 75.728 43.488 106.736 96.384 106.736 59.104 0.032 83.968-58.528 83.968-110.208z" />
<glyph unicode="&#xe600;" d="M944.946 804.152v-131.514c-92.58-32.661-159.103-121.022-159.103-224.631s66.523-191.985 159.103-224.631v-131.514h-865.988v131.514c92.58 32.661 159.103 121.022 159.103 224.631s-66.523 191.985-159.103 224.631v131.514h865.988zM991.765 883.159h-959.626c-17.776 0-32.187-14.032-32.187-31.35v-244.714c87.871 0 159.103-71.232 159.103-159.103s-71.232-159.087-159.103-159.087v-244.714c0-17.318 14.411-31.35 32.187-31.35h959.626c17.776 0 32.187 14.032 32.187 31.35v244.714c-87.871 0-159.103 71.232-159.103 159.103s71.232 159.103 159.103 159.103v244.698c0 17.318-14.411 31.35-32.187 31.35v0z" />
<glyph unicode="&#xe601;" d="M873.967 809.999c-200.139 200.139-523.906 200.107-724.045-0.032-200.075-200.060-200.107-523.827 0.032-723.966 200.091-200.091 523.922-200.123 723.997-0.047 200.139 200.123 200.107 523.954 0.016 724.045zM828.697 131.209c-174.936-174.936-458.552-174.92-633.504 0.032-174.999 174.983-174.936 458.536-0.016 633.472 174.999 174.999 458.552 175.046 633.551 0.047 174.951-174.951 174.967-458.568-0.032-633.551zM286.603 538.596l58.338-58.338-131.688-5.072c-16.101 0-31.192-17.050-32.187-36.153-0.032-18.108 11.077-31.176 28.158-32.14l131.688 5.009-54.277-54.277 36.248-36.248 126.679 126.679-126.742 126.742-36.216-36.201zM815.819 486.326l-128.685-4.077 56.331 56.331-36.232 36.232-126.679-126.679 126.758-126.758 36.169 36.169-61.34 61.34 130.692 4.045c16.101 0 29.217 15.106 30.196 34.162-0.032 18.171-10.113 30.212-27.21 29.232zM488.259 703.972h47.404v-511.945h-47.404v511.945z" />
<glyph unicode="&#xe602;" d="M511.992 959.937c-283.016 0-511.976-228.96-511.976-511.897 0-283.032 228.96-511.992 511.976-511.992 282.937 0 511.897 228.96 511.897 511.992 0 282.937-228.96 511.897-511.897 511.897zM63.979 448.055c0 247.369 200.534 447.934 448.029 447.934 109.866 0 210.441-39.614 288.357-105.252l-631.102-631.134c-65.654 77.932-105.284 178.538-105.284 288.452zM512.024 0.011c-109.913 0-210.52 39.614-288.468 105.284l631.134 631.134c65.638-77.932 105.268-178.491 105.268-288.373 0-247.479-200.549-448.044-447.934-448.044z" />
<glyph unicode="&#xe603;" d="M999.966 815.419l-120.121 120.121c-31.84 31.84-83.478 31.84-115.318 0l-678.648-678.632-85.832-320.339 320.339 85.832 0.948-0.948 678.648 678.648c31.84 31.84 31.84 83.478-0.016 115.318zM107.401 93.617l34.162 127.5 143.049-143.049-127.5-34.162-49.711 49.711zM827.891 617.176l-146.304 146.304 120.184 120.184 146.304-146.304-120.184-120.184z" />
<glyph unicode="&#xe604;" d="M688.988 466.963h169.086v-72.691h-169.086v72.691zM894.42 133.531h-820.148v420.346h434.568c15.802 33.185 36.346 63.21 61.63 86.914h-496.198v120.099h820.148v-66.37c26.864-12.642 50.568-28.444 72.691-47.407v109.037c0 22.123-9.481 39.506-25.284 55.309-15.802 14.222-25.284 22.123-47.407 22.123h-802.765c-22.123 0-50.568-7.901-66.37-22.123s-23.704-31.605-23.704-53.728v-616.296c0-22.123 7.901-42.667 23.704-56.889s44.247-22.123 66.37-22.123h804.346c22.123 0 31.605 7.901 47.407 22.123s23.704 36.346 23.704 56.889v71.111c-22.123-18.963-45.827-34.765-72.691-47.407v-31.605zM774.321 678.716c-137.481 0-248.099-110.617-248.099-248.099s110.617-248.099 248.099-248.099 248.099 110.617 248.099 248.099-112.198 248.099-248.099 248.099zM584.691 430.617c0 104.296 85.333 189.63 189.63 189.63s189.63-85.333 189.63-189.63-85.333-189.63-189.63-189.63-189.63 85.333-189.63 189.63zM224.395 466.963v-72.691h259.16c-1.58 12.642-3.16 23.704-3.16 36.346s1.58 23.704 3.16 36.346h-259.16z" />
<glyph unicode="&#x20;" horiz-adv-x="512" d="" />
<glyph unicode="&#xe000;" glyph-name="virtual" data-tags="virtual" d="M307.2 780.752v-153.6h51.248v153.6h-51.248zM230.4 780.752v-153.6h25.648v153.6h-25.648zM435.2 780.752v-153.6h128.048v153.6h-128.048zM179.2 780.752v-153.6h25.648v153.6h-25.648zM819.152 780.752v-153.6h25.648v153.6h-25.648zM742.384 780.752v-153.6h25.6v153.6h-25.6zM614.4 780.752v-153.6h51.152v153.6h-51.152zM947.136 883.152v-358.352h-870.336v358.352h870.336zM971.312 960h-895.888c-17.104 0-42.656-5.728-55.472-18.512-12.784-14.208-19.904-24.208-19.904-41.2v-382.56c0-17.088 7.12-37.040 19.904-51.248 12.832-12.784 38.384-18.464 55.456-18.464h895.904c17.088 0 21.392 5.696 34.16 18.464 12.784 14.208 18.464 34.16 18.464 51.248l0.016 382.56c0 16.992-5.696 32.672-18.464 45.456s-17.088 14.256-34.176 14.256zM308.624 122.336c0-9.952 5.728-18.464 14.256-25.6-31.28-11.344-54.064-41.2-54.064-78.224 0-45.456 35.552-82.496 81.104-82.496h375.344c45.552 0 81.104 37.040 81.104 82.496 0 37.040-22.768 68.272-55.456 78.224 9.904 10 15.648 19.904 15.648 32.672 0 91.008-72.496 164.976-162.128 164.976-52.592 0-101.024-27.040-129.424-68.224-15.6 8.512-32.672 12.784-51.152 12.784-64.016 0-115.232-52.592-115.232-116.608z" />
<glyph unicode="&#xe001;" glyph-name="downloadable" data-tags="downloadable" d="M547.504-49.936l143.696 160.688c22.768 18.464 22.768 36.992 0 55.504h-102.4v143.6c0 15.648-15.648 35.552-36.944 35.552h-79.664c-21.344 0-36.992-14.16-36.992-31.28v-147.856h-85.264c-21.392-18.512-35.552-37.040-12.864-55.504l143.696-160.688c21.28-18.496 45.44-18.496 66.736-0.016zM307.2 780.56v-153.6h51.248v153.6h-51.248zM230.4 780.56v-153.6h25.648v153.6h-25.648zM435.2 780.56v-153.6h128.048v153.6h-128.048zM179.2 780.56v-153.6h25.648v153.6h-25.648zM819.152 780.56v-153.6h25.648v153.6h-25.648zM742.384 780.56v-153.6h25.6v153.6h-25.6zM614.4 780.56v-153.6h51.152v153.6h-51.152zM947.136 882.96v-358.352l-870.336-0.016v358.368h870.336zM971.312 959.792h-895.888c-17.088 0-42.624-5.728-55.456-18.512-12.8-14.208-19.92-24.208-19.92-41.2v-382.56c0-17.088 7.12-37.040 19.904-51.248 12.832-12.784 38.384-18.464 55.456-18.464h895.904c17.088 0 21.392 5.696 34.16 18.464 12.784 14.208 18.464 34.16 18.464 51.248l0.016 382.56c0 16.992-5.696 32.672-18.464 45.456s-17.088 14.256-34.176 14.256z" />
<glyph unicode="&#xe002;" glyph-name="grouped" data-tags="grouped" d="M307.2 780.752v-153.6h51.248v153.6h-51.248zM230.4 780.752v-153.6h25.648v153.6h-25.648zM435.2 780.752v-153.6h128.048v153.6h-128.048zM179.2 780.752v-153.6h25.648v153.6h-25.648zM819.152 780.752v-153.6h25.648v153.6h-25.648zM742.384 780.752v-153.6h25.6v153.6h-25.6zM614.4 780.752v-153.6h51.152v153.6h-51.152zM947.136 883.152v-358.352h-870.336v358.352h870.336zM971.312 960h-895.888c-17.104 0-42.656-5.728-55.472-18.512-12.784-14.208-19.904-24.208-19.904-41.2v-382.56c0-17.088 7.12-37.040 19.904-51.248 12.832-12.784 38.384-18.464 55.456-18.464h410.992v-76.8h-358.352v-128l-52.624-0.016c-17.088 0-42.624-5.648-55.456-18.432-12.8-14.256-19.92-24.24-19.92-41.296v-177.76c0-17.040 7.12-36.992 19.904-51.2 12.832-12.784 38.384-18.512 55.456-18.512h179.152c17.088 0 21.392 5.728 34.16 18.512 12.784 14.208 18.464 34.16 18.464 51.2v177.76c0 17.040-5.696 32.72-18.464 45.504s-17.088 14.208-34.16 14.208h-75.376l0.016 76.864h307.2v-76.848h-52.592c-17.136 0-42.672-5.648-55.504-18.432-12.784-14.256-19.856-24.256-19.856-41.296v-177.76c0-17.040 7.072-36.992 19.856-51.2 12.832-12.784 38.384-18.512 55.504-18.512h179.152c17.040 0 21.392 5.728 34.16 18.512 12.784 14.208 18.432 34.16 18.432 51.2v177.76c0 17.040-5.648 32.72-18.432 45.504s-17.136 14.208-34.16 14.208h-75.376v76.864h307.2v-76.848h-52.624c-17.088 0-42.624-5.648-55.504-18.432-12.784-14.256-19.904-24.256-19.904-41.296v-177.76c0-17.040 7.12-36.992 19.904-51.2 12.864-12.784 38.432-18.512 55.504-18.512h179.152c17.088 0 21.392 5.728 34.16 18.512 12.784 14.208 18.464 34.16 18.464 51.2v177.76c0 17.040-5.696 32.72-18.464 45.504s-17.088 14.208-34.16 14.208h-75.328v128l-358.384 0.032v76.8h433.712c17.088 0 21.392 5.696 34.16 18.464 12.784 14.208 18.464 34.16 18.464 51.248l0.016 382.56c0 16.992-5.696 32.672-18.464 45.456s-17.088 14.256-34.176 14.256zM256.048 192.048v-204.848h-204.8v204.848h204.8zM972.752 192.048v-204.848h-204.752v204.848h204.752zM614.4 192.048v-204.848h-204.752v204.848h204.752z" />
<glyph unicode="&#xe003;" glyph-name="variable" data-tags="variable" d="M307.2 729.552v-409.504h51.248l-0.016 409.504h-51.232zM230.4 729.552v-409.504h25.648v409.504h-25.648zM563.248 729.552v-409.504h51.152v409.504h-51.152zM179.2 729.552v-409.504h25.648v409.504h-25.648zM665.552 729.552v-409.504h25.648v409.504h-25.648zM486.4 729.552v-409.504h25.552v409.504h-25.552zM435.2 729.552v-409.504h25.6v409.504h-25.6zM793.552 832v-614.4h-716.752v614.4h716.752zM817.76 908.8h-742.336c-17.088 0-42.624-5.696-55.456-18.512-12.8-14.256-19.92-24.16-19.92-41.296v-638.464c0-17.088 7.12-37.040 19.904-51.2 12.832-12.832 38.384-18.512 55.456-18.512h742.336c17.040 0 21.344 5.696 34.112 18.512 12.784 14.16 18.464 34.112 18.464 51.2l0.032 638.464c0 17.136-5.696 32.72-18.464 45.552-12.784 12.768-17.088 14.256-34.128 14.256zM230.4 64h-76.8v-7.072c0-17.088 7.168-36.944 19.952-51.2 12.784-12.832 38.384-18.512 55.456-18.512h742.304c17.088 0 21.392 5.696 34.16 18.512 12.784 14.256 18.464 34.112 18.464 51.2l0.032 638.56c0 17.040-5.696 32.672-18.464 45.456s-17.088 14.256-34.16 14.256h-24.16v-691.2h-716.784z" />
<glyph unicode="&#xe004;" glyph-name="contract" data-tags="contract" d="M511.984-63.952c282.992 0 512 228.96 512 511.904 0 283.024-229.008 512-512 512-283.024 0-511.952-228.96-511.952-512 0-282.944 228.912-511.904 511.952-511.904zM511.984 0.032c-247.472 0-447.936 200.528-447.936 447.936 0 247.472 200.448 448.032 447.936 448.032 247.424 0 447.984-200.528 447.984-448.032-0.016-247.408-200.544-447.936-447.984-447.936zM322.096 437.44v-51.2h82.496l-89.536-96.704c-11.392-11.392-10-34.112 2.832-48.336 12.784-12.832 29.872-14.208 42.624-2.832l89.584 96.656v-76.752h51.248v179.168h-179.248zM706.144 463.088v51.152h-86.752l89.584 95.264c11.392 11.392 9.952 31.328-2.832 45.504-12.864 12.832-28.528 14.208-39.904 1.44l-88.096-93.872 0.016 79.664h-51.248v-179.152h179.232z" />
<glyph unicode="&#xe005;" glyph-name="expand" data-tags="expand" d="M524.768 639.984v-51.2h82.496l-236.080-233.232v79.616h-51.152v-179.152h179.152v51.2h-86.72l240.304 230.416v-76.8h51.248v179.152h-179.248zM511.984-63.952c282.992 0 512 228.96 512 511.904 0 283.024-229.008 512-512 512-283.024 0-511.952-228.96-511.952-512 0-282.944 228.912-511.904 511.952-511.904zM511.984 0.032c-247.472 0-447.936 200.528-447.936 447.936 0 247.472 200.448 448.032 447.936 448.032 247.424 0 447.984-200.528 447.984-448.032-0.016-247.408-200.544-447.936-447.984-447.936z" />
<glyph unicode="&#xe006;" glyph-name="simple" data-tags="simple" d="M947.136 806.4h-870.288v-716.8h870.304l-0.016 716.8zM971.312 883.152c17.136 0 21.344-1.44 34.16-14.208 12.784-12.784 18.512-28.48 18.512-45.504v-740.88c0-17.136-5.728-37.040-18.512-51.296-12.832-12.784-17.040-18.432-34.16-18.432l-895.856 0.032c-17.136 0-42.72 5.648-55.504 18.432-12.784 14.256-19.952 34.16-19.952 51.296l-0.016 740.832c0 17.040 7.168 27.040 19.952 41.296 12.784 12.784 38.384 18.432 55.504 18.432l895.872-0.016zM307.2 703.952h51.184v-511.888h-51.184zM230.448 703.952h25.6v-511.888h-25.6zM716.8 703.952h51.136v-511.888h-51.136zM435.2 703.952h76.8v-511.888h-76.8zM179.248 703.952h25.552v-511.888h-25.552zM819.2 703.952h25.552v-511.888h-25.552zM639.952 703.952h25.648v-511.888h-25.648zM588.8 703.952h25.6v-511.888h-25.6z" />
<glyph unicode="&#xe007;" glyph-name="plus" data-tags="plus" d="M268.88 486.464v-76.848h204.752v-204.752h76.848l-0.016 204.768h204.752v76.848l-204.752-0.016v204.752h-76.848v-204.752h-204.736zM0.048 448.048c0-283.024 228.96-512 512-512 282.944 0 511.904 228.96 511.904 512 0 282.944-228.96 511.904-511.904 511.904-283.040 0-512-228.96-512-511.904zM64.032 448.048c0 247.392 200.528 447.936 448.032 447.936 247.392 0 447.936-200.528 447.936-447.936 0-247.472-200.528-448.032-447.936-448.032-247.504 0.016-448.032 200.544-448.032 448.032z" />
<glyph unicode="&#xe008;" glyph-name="right" data-tags="right" d="M551.856 243.168l136.48 140.816 34.16 35.552 17.040 18.512-179.152 189.152-51.2-52.688 82.496-88.144h-246.016c-28.48 0-51.248-22.72-51.248-51.2s22.768-51.2 51.248-51.2h243.184l-86.8-89.632 49.808-51.168zM512.048-63.952c282.944 0 511.904 228.96 511.904 511.904 0 283.024-228.96 512-511.904 512-283.040 0-512-228.96-512-511.984 0-282.96 228.96-511.92 512-511.92zM512.048 0.032c-247.472 0-448.032 200.528-448.032 447.936 0 247.472 200.528 448.032 448.032 448.032 247.392 0 447.936-200.528 447.936-448.032-0.016-247.408-200.544-447.936-447.936-447.936z" />
<glyph unicode="&#xe009;" glyph-name="up" data-tags="up" d="M716.848 487.808l-140.816 136.528-35.552 34.064-18.512 17.136-189.168-179.168 52.688-51.296 88.144 82.496v-246c0-28.432 22.72-51.2 51.2-51.2s51.2 22.768 51.2 51.2v243.184l89.632-86.704 51.184 49.76zM1023.952 447.968c0 283.024-228.96 512-511.904 512-283.040-0.016-512-228.976-512-512 0-282.944 228.96-511.904 512-511.904 282.944-0.016 511.904 228.944 511.904 511.904zM959.968 447.968c0-247.392-200.528-447.936-447.936-447.936-247.472 0-448.032 200.528-448.032 447.936 0 247.472 200.528 448.032 448.032 448.032 247.408-0.032 447.936-200.56 447.936-448.032z" />
<glyph unicode="&#xe00a;" glyph-name="down" data-tags="down" d="M307.168 408.192l140.816-136.528 35.552-34.064 18.512-17.136 189.152 179.168-52.688 51.296-88.144-82.496v246c0 28.432-22.72 51.2-51.2 51.2s-51.2-22.768-51.2-51.2v-243.184l-89.632 86.704-51.168-49.76zM0.048 448.048c0-283.024 228.96-512 511.904-512 283.024 0 512 228.96 512 512 0 282.944-228.96 511.904-512 511.904-282.944 0-511.904-228.96-511.904-511.904zM64.032 448.048c0 247.392 200.528 447.936 447.936 447.936 247.472 0 448.032-200.528 448.032-447.936 0-247.472-200.528-448.032-448.032-448.032-247.408 0.016-447.936 200.544-447.936 448.032z" />
<glyph unicode="&#xe00b;" glyph-name="left" data-tags="left" d="M472.192 652.848l-136.528-140.816-34.064-35.552-17.136-18.512 179.152-189.152 51.296 52.688-82.496 88.144h246c28.432 0 51.2 22.72 51.2 51.2s-22.768 51.2-51.2 51.2h-243.184l86.704 89.632-49.744 51.168zM512.048 959.952c-283.040 0-512-228.96-512-511.904 0-283.024 228.96-512 512-512 282.944 0 511.904 228.96 511.904 512 0 282.944-228.96 511.904-511.904 511.904zM512.048 895.968c247.392 0 447.936-200.528 447.936-447.936 0-247.472-200.528-448.032-447.936-448.032-247.472 0-448.032 200.528-448.032 448.032 0.016 247.408 200.544 447.936 448.032 447.936z" />
<glyph unicode="&#xe00c;" glyph-name="image" data-tags="image" d="M844.736 115.2l-255.904 255.952-179.248-179.152-76.752 76.8-153.6-153.6 665.504-0.016zM281.632 473.6c0-42.672 34.16-76.848 76.752-76.848 42.72 0 76.848 34.16 76.848 76.848 0 42.592-34.112 76.752-76.848 76.752-42.592 0-76.752-34.16-76.752-76.752zM947.168 703.952v-691.152l-870.336 0.016v691.152l870.336-0.016zM1023.984 959.952h-1023.952v-1023.904h948.528c24.208 0 34.16 8.464 49.76 24.16 17.136 15.648 25.648 38.432 25.648 61.104v938.64z" />
<glyph unicode="&#xe00d;" glyph-name="link" data-tags="link" d="M752.352 878.896c-52.688 51.2-137.952 51.2-190.544-1.392l-479.312-479.312c-52.576-52.592-52.576-137.856-1.392-190.544l17.040-17.040 66.832 68.224-44.064 44.064 536.16 536.192 44.064-44.064 68.224 66.832-17.008 17.040zM254.608 34.144l17.040-17.040c52.688-51.2 137.952-51.2 190.544 1.392l479.312 479.312c52.592 52.592 52.592 137.872 1.392 190.544l-17.040 17.040-66.832-68.224 44.064-44.064-536.16-536.176-44.064 44.064-68.256-66.848zM992.656 950c-12.784 12.832-32.72 12.832-45.504 1.44l-312.848-312.896c-11.392-12.784-11.392-32.672 0-45.456l22.768-22.768c12.784-11.392 32.672-11.392 45.456 0l312.912 312.832c11.392 12.784 11.392 32.72-1.44 45.504l-21.344 21.344zM366.928 325.696c-12.784 11.392-32.672 11.392-45.456 0l-312.912-312.832c-11.392-12.784-11.392-32.72 1.44-45.504l21.344-21.344c12.784-12.832 32.72-12.832 45.504-1.44l312.848 312.896c11.392 12.784 11.392 32.672 0 45.456l-22.768 22.768z" />
<glyph unicode="&#xe00e;" glyph-name="calendar" data-tags="calendar" d="M358.384 524.8l-76.752-76.8h76.752v-230.4l-76.752 0.016v-51.152h204.752v51.152h-76.8l-0.016 307.184h-51.184zM588.832 524.8c-28.528 0-51.2-22.768-51.2-51.152v-256.048c0-28.384 22.688-51.152 51.2-51.152h102.4c28.432 0 51.2 22.768 51.2 51.152l-0.016 256.048c0 28.384-22.768 51.152-51.2 51.152h-102.384zM588.832 473.648h102.4v-256.048h-102.4v256.048zM947.168 678.4v-665.552l-870.336 0.016v665.552l870.336-0.016zM1023.984 960h-1023.952v-1024h948.528c24.208 0 34.16 8.56 49.76 24.16 17.136 15.744 25.648 38.432 25.648 61.2v938.64zM755.2 857.568c21.296 0 38.384-17.088 38.384-38.384 0-21.344-17.088-38.432-38.384-38.432-21.344 0-38.432 17.088-38.432 38.432 0.016 21.296 17.088 38.384 38.432 38.384zM243.216 857.568c21.392 0 38.432-17.088 38.432-38.384 0-21.344-17.040-38.432-38.432-38.432-21.296 0-38.432 17.088-38.432 38.432 0 21.296 17.136 38.384 38.432 38.384z" />
<glyph unicode="&#xe00f;" glyph-name="processing" data-tags="processing" d="M0.080 448c0-49.808 39.776-89.584 91.008-89.584 49.712 0 89.584 39.776 89.584 89.584s-39.856 89.584-89.584 89.584c-51.232 0-91.008-39.776-91.008-89.584zM420.976 448c0-49.808 41.296-89.584 91.056-89.584 49.712 0 90.96 39.776 90.96 89.584s-41.248 89.584-90.96 89.584c-49.76 0-91.056-39.776-91.056-89.584zM843.344 448c0-49.808 39.824-89.584 89.632-89.584 51.2 0 90.96 39.776 90.96 89.584s-39.776 89.584-90.96 89.584c-49.808 0-89.632-39.776-89.632-89.584z" />
<glyph unicode="&#xe010;" glyph-name="view" data-tags="view" d="M305.824 428.8c0-108.096 92.448-196.24 206.144-196.24 113.84 0 206.288 88.144 206.288 196.24 0 46.944-18.512 91.056-49.808 125.136 204.8-46.944 355.536-172.080 355.536-172.080v91.056c0 0-230.4 190.544-509.136 190.544-277.328-0.016-514.8-190.544-514.8-190.544v-91.056c0 0 150.736 120.864 352.704 170.688-28.464-34.176-46.928-76.8-46.928-123.744z" />
<glyph unicode="&#xe011;" glyph-name="status-processing" data-tags="status-processing" d="M294.432 448.048c0-21.392 17.088-38.432 38.384-38.432 21.344 0 38.432 17.040 38.432 38.432 0 21.296-17.088 38.432-38.432 38.432-21.312-0.016-38.384-17.136-38.384-38.432zM473.632 448.048c0-21.392 17.040-38.432 38.432-38.432 21.296 0 38.432 17.040 38.432 38.432 0 21.296-17.136 38.432-38.432 38.432-21.408-0.016-38.432-17.136-38.432-38.432zM652.784 448.048c0-21.392 17.136-38.432 38.432-38.432s38.432 17.040 38.432 38.432c0 21.296-17.136 38.432-38.432 38.432s-38.432-17.136-38.432-38.432zM0.048 448.048c0-283.024 228.96-512 512-512 282.944 0 511.904 228.96 511.904 512 0 282.944-228.96 511.904-511.904 511.904-283.040 0-512-228.96-512-511.904zM64.032 448.048c0 247.392 200.528 447.936 448.032 447.936 247.392 0 447.936-200.528 447.936-447.936 0-247.472-200.528-448.032-447.936-448.032-247.504 0.016-448.032 200.544-448.032 448.032z" />
<glyph unicode="&#xe012;" glyph-name="status-pending" data-tags="status-pending" d="M473.632 716.768v-332.752h281.6v76.8h-204.768v255.952h-76.832zM0.048 448.048c0-283.024 228.96-512 512-512 282.944 0 511.904 228.96 511.904 512 0 282.944-228.96 511.904-511.904 511.904-283.040 0-512-228.96-512-511.904zM64.032 448.048c0 247.392 200.528 447.936 448.032 447.936 247.392 0 447.936-200.528 447.936-447.936 0-247.472-200.528-448.032-447.936-448.032-247.504 0.016-448.032 200.544-448.032 448.032z" />
<glyph unicode="&#xe013;" glyph-name="status-cancelled" data-tags="status-cancelled" d="M369.728 658.048l-53.984-53.984 142.208-145.088-143.6-146.48 53.984-55.456 143.6 146.48 143.696-146.48 54.032 55.456-143.6 146.48 142.208 145.088-54.112 53.984-142.208-145.040-142.224 145.040zM156.416 820.208c-199.040-199.104-203.312-524.736-5.632-729.536 199.152-206.24 523.344-206.24 722.448 0 197.664 204.8 193.408 530.432-5.76 729.536-197.568 197.712-513.328 197.712-711.056 0zM200.528 776.096c172.080 172.128 450.8 172.128 622.864 0 173.504-174.896 176.368-460.704 4.304-638.464-173.552-179.248-457.968-179.248-631.392 0-172.096 177.76-169.216 463.568 4.224 638.464z" />
<glyph unicode="&#xe014;" glyph-name="status-refunded" data-tags="status-refunded" d="M601.616 439.536l154.992 93.792-154.992 95.36v-65.472l-332.736 0.016v-169.248l51.152 46.944v71.104h281.6l-0.016-72.496zM448.032 435.184l-154.992-95.264 154.992-95.264v62.592h332.752v173.504l-51.152-48.384v-73.936l-281.6-0.016v76.768zM0.048 448.048c0-283.024 228.96-512 512-512 282.944 0 511.904 228.96 511.904 512 0 282.944-228.96 511.904-511.904 511.904-283.040 0-512-228.96-512-511.904zM64.032 448.048c0 247.392 200.528 447.936 448.032 447.936 247.392 0 447.936-200.528 447.936-447.936 0-247.472-200.528-448.032-447.936-448.032-247.504 0.016-448.032 200.544-448.032 448.032z" />
<glyph unicode="&#xe015;" glyph-name="status-completed" data-tags="status-completed" d="M281.6 459.44l140.768-136.576 35.552-34.112 18.464-17.088 291.552 281.552-52.592 51.2-240.32-231.776-142.208 136.528-51.216-49.728zM0.048 448.048c0-283.024 228.96-512 511.904-512 283.024 0 512 228.96 512 512 0 282.944-228.96 511.904-512 511.904-282.944 0-511.904-228.96-511.904-511.904zM64.032 448.048c0 247.392 200.528 447.936 447.936 447.936 247.472 0 448.032-200.528 448.032-447.936 0-247.472-200.528-448.032-448.032-448.032-247.408 0.016-447.936 200.544-447.936 448.032z" />
<glyph unicode="&#xe016;" glyph-name="status-failed" data-tags="status-failed" d="M478.752 691.216v-358.352h76.848l-0.016 358.352h-76.832zM478.752 281.664v-76.8h76.848v76.8h-76.848zM5.264 448.048c0-283.024 228.96-512 511.904-512 283.024 0 512 228.96 512 512 0 282.944-228.96 511.904-512 511.904-282.944 0-511.904-228.96-511.904-511.904zM69.248 448.048c0 247.392 200.528 447.936 447.936 447.936 247.472 0 448.032-200.528 448.032-447.936 0-247.472-200.528-448.032-448.032-448.032-247.408 0.016-447.936 200.544-447.936 448.032z" />
<glyph unicode="&#xe017;" glyph-name="check" data-tags="check" d="M0.032 418.192l294.384-290.112 35.552-34.176 18.512-17.088 675.504 665.6-78.224 76.768-598.768-590.144-270.16 264.512z" />
<glyph unicode="&#xe018;" glyph-name="query" data-tags="query" d="M550.384 348.432c91.056 15.648 140.768 76.848 140.768 176.32 0 113.84-65.472 179.2-179.152 179.2-109.536 0-172.128-59.712-179.248-166.368h51.264c7.072 78.224 46.944 115.168 128 115.168 85.312 0 127.952-42.672 127.952-128 0-71.104-28.432-110.88-89.584-123.744v8.512l-76.8-25.552v-76.752h76.8l0.016 41.216zM473.6 256.016v-76.8h76.8v76.8h-76.8zM0.016 447.968c0-282.944 228.96-511.904 512-511.904 282.944 0 511.952 228.96 511.952 511.904 0 283.024-229.008 511.984-511.952 511.984-283.040 0-512-228.96-512-511.984zM64.048 447.968c0 247.472 200.48 448 447.968 448 247.392 0 447.936-200.528 447.936-448.032 0-247.392-200.528-447.936-447.936-447.936-247.488 0.032-447.968 200.56-447.968 447.968z" />
<glyph unicode="&#xe019;" glyph-name="truck-1" data-tags="truck-1" d="M664.16 192.048c8.56 0 14.256 1.392 19.904 5.696-9.952 2.784-18.512 7.072-24.16 12.784-12.784 14.256-19.904 34.064-19.904 51.2v510.512c0 17.040 7.12 27.040 19.904 41.2 12.832 12.864 38.384 18.56 55.456 18.56h1.392l0.016 68.288c0 16.992-5.648 32.672-18.464 45.456-12.8 12.768-17.104 14.256-34.144 14.256h-588.736c-17.104 0-42.656-5.728-55.472-18.512-12.784-14.208-19.904-24.208-19.904-41.2v-638.56c0-17.136 7.12-36.944 19.904-51.2 12.832-12.784 38.384-18.464 55.456-18.464h588.752zM716.752 268.848v486.352l230.4-51.248-0.016-435.104h-230.384zM971.312 780.752l-254.56 51.248h-1.376c-17.088 0-42.624-5.696-55.456-18.56-12.784-14.16-19.904-24.16-19.904-41.2v-510.528c0-17.136 7.12-36.944 19.904-51.2 5.648-5.696 14.208-10 24.16-12.784 10-4.304 21.392-5.696 31.28-5.696h255.952c17.088 0 21.392 5.696 34.16 18.464 12.784 14.256 18.464 34.064 18.464 51.2v459.344c0 17.088-5.696 32.672-18.464 45.552-12.768 12.768-17.072 14.16-34.16 14.16zM76.8 25.632c0-49.712 39.856-89.632 89.632-89.632 49.808 0 89.632 39.904 89.632 89.632 0 49.76-39.824 89.632-89.632 89.632-49.776-0.016-89.632-39.872-89.632-89.632zM768 25.632c0-49.712 39.776-89.632 89.584-89.632s89.584 39.904 89.584 89.632c0 49.76-39.776 89.632-89.584 89.632s-89.584-39.872-89.584-89.632z" />
<glyph unicode="&#xe01a;" glyph-name="truck-2" data-tags="truck-2" d="M640 883.152v-110.928c0 17.040 7.12 27.040 19.904 41.2 12.832 12.864 38.384 18.56 55.456 18.56h1.392l0.016 68.304c0 16.992-5.648 32.672-18.464 45.456-12.8 12.768-17.104 14.256-34.144 14.256h-588.736c-17.104 0-42.656-5.728-55.472-18.512-12.784-14.208-19.904-24.208-19.904-41.2v-638.56c0-17.136 7.12-36.944 19.904-51.2 12.832-12.784 38.384-18.464 55.456-18.464h588.752c8.56 0 14.256 1.392 19.904 5.696 10-4.304 21.392-5.696 31.28-5.696h255.952c17.088 0 21.392 5.696 34.16 18.464 12.784 14.256 18.464 34.064 18.464 51.2l0.032 459.312c0 17.088-5.696 32.672-18.464 45.552-12.784 12.784-17.088 14.16-34.16 14.16l-254.56 51.248h-1.392c-17.088 0-42.624-5.696-55.456-18.56-12.784-14.16-19.904-24.16-19.904-41.2l-0.016-503.392h-563.2v614.304h563.2zM716.752 268.848v486.352l230.4-51.248-0.016-435.104h-230.384zM76.8 25.632c0-49.712 39.856-89.632 89.632-89.632 49.808 0 89.632 39.904 89.632 89.632 0 49.76-39.824 89.632-89.632 89.632-49.776-0.016-89.632-39.872-89.632-89.632zM768 25.632c0-49.712 39.776-89.632 89.584-89.632s89.584 39.904 89.584 89.632c0 49.76-39.776 89.632-89.584 89.632s-89.584-39.872-89.584-89.632z" />
<glyph unicode="&#xe01b;" glyph-name="globe" data-tags="globe" d="M568.896 819.232h-18.432v-81.056c11.296-12.832 16.992 5.696 25.552-15.696v-49.712c0-7.12 10-11.392 14.208-11.392 25.6 0 91.056 68.224 113.744 85.264-44.016 39.856-90.96 58.32-135.072 72.592zM473.632 819.232h-24.16c-76.752-17.136-163.6-54.064-231.84-160.736v-7.12c4.304 2.88 14.256 5.696 17.088 5.696 7.072 0 7.072-2.832 8.56-5.696v-55.408c0-12.832 34.064-103.824 49.76-108.096 8.56-2.88 17.088 1.44 22.72-4.272 17.040-19.904 22.768-49.808 36.992-68.224 21.344-28.528 54.032-59.808 82.496-71.104 9.952-7.168 29.872 4.224 38.384-11.392v-89.632c0-18.512 34.112 4.272 34.112-29.904v-9.904c-4.224-18.512-25.552 2.832-34.112-18.512v-150.736c4.272-8.512 24.16-8.512 34.112-8.512 0 0 39.856-2.88 39.856 14.208 0 19.952-22.768 11.392-28.48 12.784 22.768 26.992 44.112 56.896 69.712 81.104 36.944 34.112 46.896 72.496 61.104 100.976 5.696 12.784 14.208 32.672 14.208 36.944 0 29.872-115.168 83.888-122.256 86.752h-78.272c-24.16 11.392-51.152 36.992-66.768 63.984v56.896l5.648 7.168h39.824l5.696-7.168v-55.408c1.44-4.304 14.208-11.392 18.464-11.392 5.696 0 2.88 7.072 7.12 11.392v99.488c0 15.6 35.552 36.992 39.824 39.824h55.472c4.272 0 21.344 4.272 21.344 14.16 0 21.392-29.872-5.648-39.776 5.728v54.064c0 21.296-28.528 14.16-34.16 17.040 14.208 25.6 28.432 36.992 28.432 54.064 0 7.072-2.832 9.904-5.648 11.296-10 2.88-22.768 0-31.328 7.168-9.952 7.072-32.72 18.464-34.112 35.552v56.928zM0.048 448.048c0-283.024 228.96-512 512-512 282.944 0 511.904 228.96 511.904 512 0 282.944-228.96 511.904-511.904 511.904-283.040 0-512-228.96-512-511.904zM64.032 448.048c0 247.392 200.528 447.936 448.032 447.936 247.392 0 447.936-200.528 447.936-447.936 0-247.472-200.528-448.032-447.936-448.032-247.504 0.016-448.032 200.544-448.032 448.032z" />
<glyph unicode="&#xe01c;" glyph-name="gear" data-tags="gear" d="M0.048 338.48c14.16-63.984 39.824-125.088 75.376-179.152 41.248 14.16 88.192 5.648 120.912-27.040 32.672-32.72 41.2-79.616 26.992-120.816 54.032-35.552 115.216-61.2 179.152-75.456 17.088 44.112 59.76 75.456 109.488 75.456 49.808 0 92.496-31.328 109.536-75.456 64.032 14.256 125.184 39.904 179.248 75.456-14.256 41.2-5.728 88.096 26.992 120.816 32.72 32.672 79.664 41.2 120.864 27.040 35.552 54.064 61.104 115.168 75.376 179.152-44.064 17.136-75.376 59.712-75.376 109.536s31.28 92.4 75.376 109.536c-14.256 63.984-39.824 125.088-75.376 179.152-41.2-14.16-88.144-5.648-120.864 27.040-32.72 32.72-41.248 79.616-26.992 120.816-54.096 35.536-115.248 61.184-179.28 75.44-17.040-44.112-59.712-75.456-109.536-75.456-49.712 0-92.4 31.328-109.488 75.456-63.936-14.256-125.136-39.904-179.152-75.456 14.208-41.2 5.696-88.096-26.992-120.816-32.72-32.672-79.664-41.2-120.912-27.040-35.52-54.080-61.184-115.184-75.344-179.168 44.064-17.136 75.376-59.712 75.376-109.536s-31.312-92.384-75.376-109.504zM153.6 448c0 197.68 160.784 358.4 358.352 358.4 197.728 0 358.4-160.736 358.4-358.4s-160.688-358.4-358.4-358.4c-197.568 0-358.352 160.736-358.352 358.4z" />
<glyph unicode="&#xe01d;" glyph-name="cart" data-tags="cart" d="M204.848 655.616v149.312c-1.488 21.392-10 38.432-25.648 54.064-15.6 15.648-45.456 24.16-69.616 24.16h-35.552c-22.768 0-32.768-11.392-49.808-26.992-14.224-14.208-22.784-29.856-24.176-49.76h128v-531.904c0-22.72 8.56-42.672 25.552-58.272 17.088-15.696 46.944-24.16 69.712-24.16h476.384c22.72 0 32.72 11.344 49.808 26.992 14.16 14.256 22.688 29.904 24.16 49.808h-568.848v78.192c7.072-1.44 12.784-1.44 18.464-1.44h520.512c24.16 0 95.264 12.832 112.352 29.904 17.040 15.648 28.432 31.248 39.824 55.408l127.952 294.432c0 22.72-9.904 42.624-27.040 58.272-17.040 15.648-26.992 22.768-49.76 22.768h-723.808c-5.696 0-11.392 0-18.464-1.488v-75.376h742.304l-128-307.2-614.304 0.016v233.264zM614.4 76.816c0-35.552 28.48-63.984 64.032-63.984s63.984 28.432 63.984 63.984-28.432 63.984-63.984 63.984-64.032-28.432-64.032-63.984zM102.448 76.816c0-35.552 28.432-63.984 63.984-63.984s63.984 28.432 63.984 63.984-28.432 63.984-63.984 63.984-63.984-28.432-63.984-63.984z" />
<glyph unicode="&#xe01e;" glyph-name="card" data-tags="card" d="M665.552 217.616h-255.904v76.8h255.904v-76.8zM358.448 217.616h-179.248v76.8h179.248v-76.8zM947.136 575.952h-870.336v-460.704h870.352l-0.016 460.704zM947.136 780.752h-870.336v-127.952h870.352l-0.016 127.952zM947.136 857.568c22.768 0 32.72-7.072 49.76-22.72 17.136-15.648 27.040-35.552 27.040-58.32v-652.736c0-22.768-8.512-45.552-25.552-61.152-15.696-15.6-25.648-24.16-49.808-24.16h-853.264c-22.768 0-52.592 8.56-69.712 24.16-17.040 15.568-25.552 38.352-25.552 61.12v652.736c0 22.768 8.512 41.296 25.552 56.896 15.648 15.6 46.944 24.16 69.712 24.16h851.824z" />
<glyph unicode="&#xe01f;" glyph-name="stats" data-tags="stats" d="M819.2 166.448h-76.8v435.152h76.8v-435.152zM639.952 166.448h-76.752v332.752h76.752v-332.752zM460.8 166.448h-76.752v511.952h76.752v-511.952zM281.6 166.448h-76.8v204.752h76.8v-204.752zM947.136 806.4h-870.288v-716.8h870.304l-0.016 716.8zM971.312 883.152c17.136 0 21.344-1.44 34.16-14.208 12.784-12.784 18.512-28.48 18.512-45.504v-740.88c0-17.136-5.728-37.040-18.512-51.296-12.832-12.784-17.040-18.432-34.16-18.432l-895.856 0.032c-17.136 0-42.72 5.648-55.504 18.432-12.784 14.256-19.952 34.16-19.952 51.296l-0.016 740.832c0 17.040 7.168 27.040 19.952 41.296 12.784 12.784 38.384 18.432 55.504 18.432l895.872-0.016z" />
<glyph unicode="&#xe020;" glyph-name="star-full" data-tags="star-full" d="M511.968 934.4l157.904-321.456 354.048-51.152-255.904-248.864 59.712-351.328-315.76 164.992-315.664-164.992 59.712 351.328-255.952 248.864 354.096 51.152z" />
<glyph unicode="&#xe021;" glyph-name="star-empty" data-tags="star-empty" d="M512.048 936.96l-157.952-321.456-354.048-51.2 255.952-248.864-59.712-351.184 315.76 164.896 315.632-164.896-59.712 351.184 256 248.864-354.096 51.2-157.824 321.456zM512.048 794.752l117.952-236.080 265.952-38.432-191.968-183.456 45.552-258.832-237.472 122.304-237.568-122.304 45.552 258.832-192.048 183.456 266 38.432 118.048 236.080z" />
<glyph unicode="&#xe022;" glyph-name="up-down" data-tags="up-down" d="M511.936 955.696l-422.288-418.064h844.704l-422.416 418.064zM89.648 358.432l422.288-418.112 422.416 418.112h-844.704z" />
<glyph unicode="&#xe023;" glyph-name="reports" data-tags="reports" d="M1023.952 729.552c0 28.528-27.040 51.2-59.712 51.2h-34.16c-32.672 0-59.712-22.688-59.712-51.2v-793.552h153.6v793.552zM588.8 908.8c0 28.432-27.040 51.2-59.728 51.2h-34.112c-32.72 0-59.76-22.768-59.76-51.2v-972.784h153.6v972.784zM153.6 499.2c0 28.432-26.992 51.2-59.712 51.2h-34.128c-32.672 0-59.712-22.768-59.712-51.2v-563.2h153.552v563.2z" />
<glyph unicode="&#xe024;" glyph-name="search" data-tags="search" d="M268.832 824.832c-157.856-157.856-177.76-401.088-55.504-573.104l-5.696-4.272-184.864-186.256c-29.872-28.528-29.872-75.376-1.44-103.824s75.376-28.48 103.776 1.392l186.288 184.944 4.352 5.648c172.032-122.304 415.248-102.4 573.056 55.456 176.368 174.896 180.592 457.92 8.56 628.608-170.704 172.048-453.648 167.744-628.528-8.592zM329.936 763.68c140.816 140.816 366.928 143.648 503.376 5.696 138-136.528 135.184-362.608-5.648-503.424-140.768-140.768-366.88-143.6-503.376-5.696-137.952 136.512-135.136 362.656 5.648 503.424z" />
<glyph unicode="&#xe025;" glyph-name="search-2" data-tags="search-2" d="M411.088 628.672c-65.424-65.472-75.408-164.976-29.872-241.84-1.488-1.392-2.88-2.832-4.304-4.224l-69.664-69.712c-19.904-18.464-19.904-49.76 0-69.664s51.2-19.904 69.664 0l69.712 69.664c1.392 1.44 2.832 2.832 4.224 4.304 76.848-45.552 176.368-35.552 241.84 29.872 76.752 76.8 76.752 201.92-1.488 280.128-78.192 78.24-203.328 78.24-280.112 1.472zM455.104 584.56c52.64 52.64 139.424 52.64 192.016-1.44 54.064-52.592 54.064-139.376 1.44-192.016-52.64-54.032-139.376-52.592-193.456 0-52.576 54.080-54.016 140.832 0 193.456zM0.048 448.048c0-283.024 228.96-512 512-512 282.944 0 511.904 228.96 511.904 512 0 282.944-228.96 511.904-511.904 511.904-283.040 0-512-228.96-512-511.904zM64.032 448.048c0 247.392 200.528 447.936 448.032 447.936 247.392 0 447.936-200.528 447.936-447.936 0-247.472-200.528-448.032-447.936-448.032-247.504 0.016-448.032 200.544-448.032 448.032z" />
<glyph unicode="&#xe026;" glyph-name="user2" data-tags="user" d="M611.568 492.080c0 51.2-29.904 122.304-112.4 122.304s-112.304-56.848-112.304-118.048c0-32.672 15.6-99.536 41.2-127.952 4.272-4.272 29.904-22.768 29.904-32.72 0-14.208-4.272-9.952-9.952-14.208-31.328-71.104-230.4-41.296-230.4-163.552 0-14.208 18.464-28.48 18.464-42.624h557.456v69.616c0 99.632-214.704 65.472-246.048 150.768 56.96 66.88 64.080 99.568 64.080 156.416zM947.136 703.952v-691.104l-870.336 0.016v691.088h870.336zM1023.952 960h-1023.904v-1024h948.528c24.16 0 34.112 8.56 49.808 24.16 17.040 15.744 25.552 38.432 25.552 61.2v938.64z" />
<glyph unicode="&#xe027;" glyph-name="windows" data-tags="windows" d="M947.136 608.688v-595.84l-819.088 0.016v-76.848h824.8c21.296 0 35.552 7.168 49.808 21.344 14.208 14.208 21.296 34.16 21.296 52.64v822h-76.8v-223.312zM819.152 729.552v-588.752h-742.352v588.752h742.352zM896 960h-895.952v-896h824.848c21.296 0 29.824 7.168 44.064 21.392 14.256 14.16 27.040 38.384 27.040 58.272v816.336z" />
<glyph unicode="&#xe028;" glyph-name="note" data-tags="note" d="M947.136 703.952h-870.336v-691.104h870.352l-0.016 691.104zM1023.952 960v-938.624c0-22.768-8.512-45.456-25.552-61.2-15.696-15.6-25.648-24.16-49.808-24.16h-948.544v1023.984h1023.904z" />
<glyph unicode="&#xe029;" glyph-name="east" data-tags="east" d="M989.856 533.408l-416.736 379.696c-45.456 58.32-92.4 58.32-137.952 0v-237.472h-356.912c-42.624 0-78.192-42.672-78.192-96.752v-268.784c0-52.592 34.112-95.264 76.8-95.264h358.304v-226.096c45.552-56.848 92.496-69.712 137.952-12.784l416.72 381.072c45.472 58.336 45.472 118.064 0.016 176.384zM76.864 445.232v153.6h435.104v255.952l460.8-409.552-460.8-409.552v255.936h-435.104v153.616z" />
<glyph unicode="&#xe02a;" glyph-name="north" data-tags="north" d="M426.624 925.824l-379.792-418.112c-58.24-44.064-58.24-91.008 0-136.48h237.568v-356.912c0-42.72 42.592-78.272 96.656-78.272h268.784c52.64 0 95.264 34.16 95.264 76.8v358.384h226.096c56.944 45.456 69.712 92.4 12.864 136.48l-381.168 418.112c-58.32 45.552-118.032 45.552-176.272 0zM514.704 12.848h-153.552v435.152h-256l409.552 460.784 409.648-460.8-256.032 0.016v-435.152h-153.616z" />
<glyph unicode="&#xe02b;" glyph-name="attributes" data-tags="attributes" d="M230.4 588.752v-76.752h307.2v76.752h-307.2zM332.8 435.152v-127.952h460.752v127.952h-460.752zM947.136 793.552v-691.152h-870.336v691.152h870.336zM971.312 870.336h-895.888c-17.088 0-42.624-5.696-55.456-18.464-12.8-14.256-19.92-24.16-19.92-41.248v-715.264c0-17.136 7.12-37.040 19.904-51.296 12.832-12.784 38.384-18.432 55.456-18.432h895.904c17.088 0 21.392 5.648 34.16 18.432 12.784 14.256 18.464 34.16 18.464 51.296l0.016 715.264c0 17.088-5.696 32.72-18.464 45.504-12.784 12.832-17.088 14.208-34.176 14.208z" />
<glyph unicode="&#xe02c;" glyph-name="inventory" data-tags="inventory" d="M947.136 89.6h-870.336v793.552h-1.376c-17.088 0-42.624-5.648-55.456-18.432-12.8-14.256-19.92-24.24-19.92-41.296v-740.88c0-17.136 7.12-37.040 19.904-51.296 12.832-12.784 38.384-18.432 55.456-18.432h895.904c17.088 0 21.392 5.648 34.16 18.432 12.784 14.256 18.464 34.16 18.464 51.296v7.024l-76.8 0.016zM870.352 371.2c0-42.624 34.16-76.8 76.8-76.8 42.72 0 76.8 34.16 76.8 76.8s-34.064 76.8-76.8 76.8c-42.64 0-76.8-34.16-76.8-76.8zM908.784 371.2c0 21.344 17.040 38.384 38.384 38.384s38.384-17.040 38.384-38.384-17.040-38.384-38.384-38.384-38.384 17.056-38.384 38.384zM520.512 642.848c12.832-24.16 38.384-41.248 68.272-41.248 31.28 0 56.848 18.464 69.712 44.064 130.816-28.432 199.072-137.952 233.232-221.84 9.904 11.392 25.552 19.904 41.2 22.768-36.944 82.4-119.44 214.704-268.784 248.864-8.512 34.064-38.384 59.712-75.376 59.712-36.944 0-68.272-27.040-75.376-61.2-170.688-49.76-251.744-258.784-278.736-351.264-32.72-9.904-55.504-38.336-55.504-73.888 0-42.672 34.16-76.8 76.848-76.8 42.592 0 76.752 34.112 76.752 76.8 0 29.872-17.040 55.408-42.672 68.224 31.328 106.704 99.616 264.56 230.432 305.808zM550.368 678.4c0 21.344 17.088 38.384 38.432 38.384 21.296 0 38.384-17.040 38.384-38.384s-17.088-38.384-38.384-38.384c-21.344 0.016-38.432 17.040-38.432 38.384zM217.632 268.848c0 21.296 17.088 38.336 38.432 38.336 21.296 0 38.384-17.040 38.384-38.336 0-21.392-17.088-38.432-38.384-38.432-21.344 0.016-38.432 17.040-38.432 38.432z" />
<glyph unicode="&#xe02d;" glyph-name="mail" data-tags="mail" d="M947.136 752.32v-662.72h-870.336v662.72l386.816-386.816c27.040-27.040 69.712-27.040 96.752 0l386.768 386.816zM119.488 806.4h785.024l-359.824-361.264c-18.464-17.040-46.896-17.040-65.424 0l-359.776 361.264zM971.312 883.152h-895.888c-17.088 0-42.624-5.648-55.456-18.432-12.8-14.256-19.92-24.24-19.92-41.296v-740.88c0-17.136 7.12-37.040 19.904-51.296 12.832-12.784 38.384-18.432 55.456-18.432h895.904c17.088 0 21.392 5.648 34.16 18.432 12.784 14.256 18.464 34.16 18.464 51.296l0.016 740.88c0 17.040-5.696 32.72-18.464 45.504s-17.088 14.224-34.176 14.224z" />
<glyph unicode="&#xe02e;" glyph-name="south" data-tags="south" d="M597.232-29.84l379.696 416.624c58.32 45.552 58.32 92.496 0 138h-237.488v356.944c0 42.72-42.688 78.272-95.264 78.272h-268.832c-54.032 0-96.656-34.16-96.656-76.848v-358.352h-224.704c-58.32-45.504-71.104-92.448-12.832-138l379.728-416.624c58.288-45.552 118.016-45.552 176.352-0.016zM508.992 883.152h153.6v-435.152h256.048l-409.648-460.784-409.504 460.784h256v435.152h153.504z" />
<glyph unicode="&#xe02f;" glyph-name="west" data-tags="west" d="M34.16 362.768l416.672-379.696c45.504-58.32 92.448-58.32 137.952 0v237.472h356.96c42.624 0 78.192 42.72 78.192 96.704v267.392c0 53.984-34.064 96.704-76.8 96.704h-358.336v224.704c-45.504 58.272-92.448 71.104-137.952 12.784l-416.688-379.696c-45.504-58.32-45.504-118.032 0-176.368zM947.136 450.944v-153.6h-435.184v-255.952l-460.704 409.552 460.704 409.552v-255.952h435.2l-0.016-153.6z" />
<glyph unicode="&#xe030;" glyph-name="share" data-tags="share" d="M943.632 883.184v-229.008l76.8-56.848v302.848c0 17.136-5.696 32.72-18.512 45.552-12.784 12.784-17.040 14.256-34.112 14.256h-896c-16.992 0-42.592-5.696-55.36-18.512-12.88-14.256-19.968-24.16-19.968-41.296v-894.464c0-17.040 7.072-36.944 19.952-51.2 12.784-12.784 38.384-18.464 55.36-18.464h896c17.088 0 21.344 5.696 34.112 18.464 12.832 14.256 18.512 34.16 18.512 51.2l0.016 292.944-76.8-56.848v-228.96h-870.352v870.336h870.352zM278.080 396.784h460.704v-128.016l288.72 179.2-288.72 179.184v-127.968h-358.304c-66.848 0-102.4-35.552-102.4-102.4z" />
<glyph unicode="&#xe031;" glyph-name="refresh" data-tags="refresh" d="M922.288 332.832c2.88 8.512 4.272 17.040 5.696 25.6l-75.408 18.464c-1.392-8.512-2.88-17.088-5.696-24.16-52.544-206.24-263.024-331.376-469.264-278.736-204.8 54.032-329.872 264.48-275.904 469.28 52.688 206.224 263.12 331.36 469.312 277.344 115.168-28.48 204.752-108.096 251.696-209.104l-110.88-65.376c-2.88-14.256 4.224-28.432 18.432-31.28l199.104-51.2c14.208-2.88 28.48 4.272 31.328 18.512l51.152 199.072c2.832 14.256-4.224 28.432-18.464 31.28l-103.776-61.104c-56.896 116.56-163.552 208.976-300.064 244.528-247.488 64.048-499.232-85.344-563.216-332.768-63.968-247.472 85.312-499.184 332.816-563.104 247.424-64.080 499.104 85.312 563.136 332.752z" />
<glyph unicode="&#xe032;" glyph-name="navigation" data-tags="navigation" d="M48.384 857.568c-26.992 0-48.336-21.36-48.336-46.96v-8.464c0-25.648 21.344-46.944 48.336-46.944h927.232c27.040 0 48.336 21.296 48.336 46.944v8.464c0 25.6-21.296 46.944-48.336 46.944l-927.232 0.016zM48.384 499.2c-26.992 0-48.336-21.344-48.336-46.944v-8.512c0-25.6 21.344-46.944 48.336-46.944h927.232c27.040 0 48.336 21.344 48.336 46.944v8.512c0 25.6-21.296 46.944-48.336 46.944h-927.232zM48.384 140.8c-26.992 0-48.336-21.28-48.336-46.928v-8.464c0-25.6 21.344-46.944 48.336-46.944l927.232-0.016c27.040 0 48.336 21.344 48.336 46.944v8.464c0 25.648-21.296 46.944-48.336 46.944l-927.232 0.016z" />
<glyph unicode="&#xe033;" glyph-name="on-hold" data-tags="on-hold" d="M512.048 959.952c-283.024 0-512-228.96-512-511.904 0-283.024 228.96-512 512-512 282.944 0 511.904 228.96 511.904 512 0 282.944-228.96 511.904-511.904 511.904zM512.064 0.032c-247.488 0-448.032 200.528-448.032 448.032 0 247.376 200.528 447.936 448.032 447.936 247.408 0 447.936-200.528 447.936-447.936 0-247.488-200.528-448.032-447.936-448.032zM268.512 486.4v-76.784h487.008v76.784h-204.752z" />
<glyph unicode="&#xe034;" glyph-name="external" data-tags="external" d="M307.2 780.56v-153.616h51.248v153.616h-51.248zM230.4 780.56v-153.616h25.648v153.616h-25.648zM435.2 780.56v-153.616h128.048v153.616h-128.048zM179.2 780.56v-153.616h25.648v153.616h-25.648zM819.152 780.56v-153.616h25.648v153.616h-25.648zM742.368 780.56v-153.616h25.616v153.616h-25.616zM614.4 780.56v-153.616h51.152v153.616h-51.152zM947.136 882.96v-358.352l-870.336-0.016v358.368h870.336zM971.312 959.792h-895.888c-17.088 0-42.624-5.728-55.456-18.512-12.8-14.208-19.92-24.208-19.92-41.2v-382.56c0-17.088 7.12-37.040 19.904-51.248 12.832-12.784 38.384-18.464 55.456-18.464h895.904c17.088 0 21.392 5.696 34.16 18.464 12.784 14.208 18.464 34.16 18.464 51.248l0.016 382.56c0 16.992-5.696 32.672-18.464 45.456-12.784 12.784-17.088 14.256-34.176 14.256zM707.648 157.968l-160.688 143.712c-18.464 22.752-36.992 22.752-55.52 0v-102.4l-143.6 0.016c-15.632 0-35.552-15.632-35.552-36.944v-79.664c0-21.36 14.16-36.992 31.28-36.992h147.84v-85.264c18.512-21.392 37.056-35.552 55.52-12.848l160.704 143.664c18.48 21.28 18.48 45.44 0.016 66.72z" />
<glyph unicode="&#xe035;" glyph-name="expand-2" data-tags="expand-2" d="M571.664 837.952h193.632l-210.112-226.96c-26.736-26.72-23.472-80.064 6.64-113.488 29.968-30.064 70.096-33.296 100.048-6.624l210.24 226.848v-180.128h120.256v420.512h-420.704v-120.16zM452.256 386.448c-30.176 30.080-66.944 33.36-93.632 3.376l-206.736-220.32v186.976h-120.272v-420.48h420.672v120.080h-203.584l210.208 223.568c26.704 26.736 23.36 73.504-6.656 106.8z" />
<glyph unicode="&#xe036;" glyph-name="contract-2" data-tags="contract-2" d="M66.272 303.072h193.632l-210.128-226.96c-26.736-26.72-23.472-80.064 6.656-113.472 29.968-30.080 70.080-33.312 100.032-6.624l210.24 226.848v-180.128h120.256v420.496h-420.688v-120.16zM967.616 933.84c-30.192 30.080-66.96 33.36-93.648 3.36l-206.736-220.304v186.976h-120.256v-420.48h420.672v120.064l-203.616-0.016 210.224 223.584c26.72 26.736 23.36 73.52-6.64 106.816z" />
<glyph unicode="&#xe037;" glyph-name="phone" data-tags="phone" d="M251.488-54.704c-32.48 0-63.040 12.528-86.192 35.264l-127.744 112.304c-47.936 47.936-47.936 125.936 0 173.872l84.224 84.272c23.248 23.232 54.128 36 86.96 36 32.848 0 63.712-12.784 86.928-35.984-0.016 0.032-0.032 0.032-0.032 0.032 0.144 0 8.352-6.448 20.32-6.448 12.592 0 21.040 7.152 21.408 7.456l264.448 264.512c-0.016-0.016-0.032-0.032-0.048-0.032-0.112 0 6.464 8.256 6.464 20.32 0 7.664-2.688 13.824-4.928 17.6l-2.080 2.080c-47.936 47.936-47.936 125.936 0 173.872l84.272 84.272c23.216 23.216 54.080 36.016 86.928 36.016 32.48 0 63.040-12.512 86.192-35.264l127.76-112.304c23.248-23.232 36.032-54.112 36.032-86.944s-12.8-63.728-36.032-86.944l-647.92-647.936c-23.232-23.216-54.096-36.016-86.96-36.016zM80.624 137.2l127.632-112.208c23.136-23.12 63.392-23.104 86.512 0l647.936 647.936c11.552 11.552 17.92 26.928 17.92 43.248 0 16.016-6.128 31.136-17.28 42.608l-127.632 112.208c-23.152 23.12-63.392 23.104-86.512 0.016l-84.256-84.272c-11.552-11.552-17.936-26.912-17.936-43.248s6.368-31.696 17.936-43.248l8.048-8.768c7.76-11.312 17.056-29.952 17.072-54.576 0-37.024-21.472-60.8-23.92-63.376l-266.224-266.208c-3.216-3.056-27.008-24.496-63.984-24.496-36.992 0-60.752 21.424-63.328 23.872-12.176 12.176-27.536 18.528-43.872 18.528s-31.712-6.368-43.264-17.936l-84.24-84.24c-23.616-23.616-23.824-61.936-0.608-85.84z" />
<glyph unicode="&#xe038;" glyph-name="user" data-tags="user" d="M1023.952 0.064h-1023.904v29.808c0 12.192 0.448 24.448 0.912 36.688 0.432 11.52 0.88 23.040 0.88 34.56 0 142.928 134.192 179.824 242.016 209.456 67.552 18.56 131.376 36.112 149.376 72.064 3.072 6.112 6.24 12.912 8.64 18.208-3.696 5.024-12.592 14.624-20.592 23.264-4.336 4.672-9.088 9.776-14.192 15.472-24.784 27.456-82.4 104.56-82.4 227.152 0 140.080 83.328 227.088 217.488 227.088 142.896 0 217.632-117.808 217.632-234.208 0-98.752-14.48-159.616-101.472-265.52 28.288-41.776 104.72-60.88 178.88-79.424 106.256-26.576 226.72-56.688 226.72-168.432v-146.176zM60.352 59.648h903.984v86.576c0 60.816-68.592 82.336-181.552 110.592-97.264 24.336-197.808 49.472-227.808 131.104l-6 16.336 11.28 13.248c90.944 106.832 99.952 153.52 99.952 242.112 0 60.4-33.024 174.608-158.032 174.608-137.376 0-157.872-104.944-157.872-167.488 0-101.92 46.88-164.896 67.056-187.248 4.896-5.44 9.488-10.368 13.632-14.848 22.16-23.872 38.144-41.12 38.144-66.432v-6.208l-2.464-5.696c0 0-7.296-16.784-14.144-30.4-29.904-59.648-106.144-80.624-186.864-102.816-119.744-32.912-198.208-61.28-198.208-151.984 0-12.24-0.464-24.544-0.928-36.8-0.064-1.568-0.112-3.104-0.176-4.656z" />
<glyph unicode="&#xe039;" glyph-name="status" data-tags="status" d="M5.264 448.048c0-283.024 228.96-512 511.904-512 283.024 0 512 228.96 512 512 0 282.928-228.96 511.904-512 511.904-282.944 0-511.904-228.96-511.904-511.904zM69.248 448.048c0 247.376 200.528 447.936 447.936 447.936 247.488 0 448.032-200.528 448.032-447.936 0-247.472-200.528-448.032-448.032-448.032-247.408 0.016-447.936 200.544-447.936 448.032z" />
<glyph unicode="&#xe03a;" glyph-name="user-fill" data-tags="user-fill" d="M1023.952 0.064h-1023.904v29.808c0 12.192 0.448 24.448 0.912 36.688 0.432 11.52 0.88 23.040 0.88 34.56 0 142.928 134.192 179.824 242.016 209.456 67.552 18.56 131.376 36.112 149.376 72.064 3.072 6.112 6.24 12.912 8.64 18.208-3.696 5.024-12.592 14.624-20.592 23.264-4.336 4.672-9.088 9.776-14.192 15.472-24.784 27.456-82.4 104.56-82.4 227.152 0 140.080 83.328 227.088 217.488 227.088 142.896 0 217.632-117.808 217.632-234.208 0-98.752-14.48-159.616-101.472-265.52 28.288-41.776 104.72-60.88 178.88-79.424 106.256-26.576 226.72-56.688 226.72-168.432v-146.176z" />
<glyph unicode="&#xe03b;" glyph-name="phone-fill" data-tags="phone-fill" d="M251.488-54.704c-32.48 0-63.040 12.528-86.192 35.264l-127.744 112.304c-47.936 47.936-47.936 125.936 0 173.872l84.224 84.272c23.248 23.232 54.128 36 86.96 36 32.848 0 63.712-12.784 86.928-35.984-0.016 0.032-0.032 0.032-0.032 0.032 0.144 0 8.352-6.448 20.32-6.448 12.592 0 21.040 7.152 21.408 7.456l264.448 264.512c-0.016-0.016-0.032-0.032-0.048-0.032-0.112 0 6.464 8.256 6.464 20.32 0 7.664-2.688 13.824-4.928 17.6l-2.080 2.080c-47.936 47.936-47.936 125.936 0 173.872l84.272 84.272c23.216 23.216 54.080 36.016 86.928 36.016 32.48 0 63.040-12.512 86.192-35.264l127.76-112.304c23.248-23.232 36.032-54.112 36.032-86.944s-12.8-63.728-36.032-86.944l-647.92-647.936c-23.232-23.216-54.096-36.016-86.96-36.016z" />
<glyph unicode="&#xe03c;" glyph-name="status-fill" data-tags="status-fill" d="M5.264 448.048c0-283.024 228.96-512 511.904-512 283.024 0 512 228.96 512 512 0 282.928-228.96 511.904-512 511.904-282.944 0-511.904-228.96-511.904-511.904z" />
<glyph unicode="&#xe03d;" glyph-name="woo" data-tags="woo" d="M612.192 533.664c0 6.896-3.136 51.6-28 51.6-37.36 0-46.704-72.256-46.704-82.624 0-3.408 3.152-58.496 28.032-58.496 34.192 0.032 46.672 72.288 46.672 89.52zM814.384 533.664c0 6.896-3.152 51.6-28.032 51.6-37.28 0-46.608-72.256-46.608-82.624 0-3.408 3.072-58.496 27.952-58.496 34.192 0.032 46.688 72.288 46.688 89.52zM141.296 959.232c-68.224 0-123.504-55.488-123.504-123.92v-650.72c0-68.432 55.296-123.92 123.504-123.92h339.808l123.504-123.936v123.936h278.048c68.224 0 123.52 55.472 123.52 123.92v650.72c0 68.432-55.296 123.92-123.52 123.92h-741.36zM668.16 537.072c0-55.088-31.088-154.88-102.64-154.88-6.208 0-18.496 3.616-25.424 6.016-32.512 11.168-50.192 49.696-52.352 66.256 0 0-3.072 17.792-3.072 40.752 0 22.992 3.072 45.328 3.072 45.328 15.552 75.728 43.552 106.736 96.448 106.736 59.072 0.032 83.968-58.528 83.968-110.208zM486.496 657.6c0-3.392-43.552-141.168-43.552-213.424v-75.712c-2.592-12.080-4.16-24.144-21.824-24.144-46.608 0-88.88 151.472-92.016 161.84-6.208-6.896-62.24-161.84-96.448-161.84-24.864 0-43.552 113.648-46.608 123.936-9.344 55.072-26.048 157.52-26.048 164.416 0 20.672 1.152 38.736 26.048 38.736 6.208 0 21.6-6.064 23.712-17.168 11.648-62.032 16.688-120.512 29.168-185.968 1.856-2.928 1.504-7.008 4.56-10.432 3.152 10.288 66.928 168.784 94.96 168.784 22.544 0 30.4-44.592 33.536-61.824 6.208-20.656 13.088-55.216 22.416-82.752 0 13.776 12.48 203.12 65.392 203.12 18.592-0.032 26.704-6.928 26.704-27.568zM870.32 537.072c0-55.088-31.088-154.88-102.64-154.88-6.192 0-18.448 3.616-25.424 6.016-32.432 11.168-50.176 49.696-52.288 66.256 0 0-3.888 17.92-3.888 40.896s3.888 45.184 3.888 45.184c15.552 75.728 43.488 106.736 96.384 106.736 59.104 0.032 83.968-58.528 83.968-110.208z" />
<glyph unicode="&#xe600;" glyph-name="coupon" data-tags="coupon" d="M944.946 804.152v-131.514c-92.58-32.661-159.103-121.022-159.103-224.631s66.523-191.985 159.103-224.631v-131.514h-865.988v131.514c92.58 32.661 159.103 121.022 159.103 224.631s-66.523 191.985-159.103 224.631v131.514h865.988zM991.765 883.159h-959.626c-17.776 0-32.187-14.032-32.187-31.35v-244.714c87.871 0 159.103-71.232 159.103-159.103s-71.232-159.087-159.103-159.087v-244.714c0-17.318 14.411-31.35 32.187-31.35h959.626c17.776 0 32.187 14.032 32.187 31.35v244.714c-87.871 0-159.103 71.232-159.103 159.103s71.232 159.103 159.103 159.103v244.698c0 17.318-14.411 31.35-32.187 31.35v0z" />
<glyph unicode="&#xe601;" glyph-name="limit" data-tags="limit" d="M873.967 809.999c-200.139 200.139-523.906 200.107-724.045-0.032-200.075-200.060-200.107-523.827 0.032-723.966 200.091-200.091 523.922-200.123 723.997-0.047 200.139 200.123 200.107 523.954 0.016 724.045zM828.697 131.209c-174.936-174.936-458.552-174.92-633.504 0.032-174.999 174.983-174.936 458.536-0.016 633.472 174.999 174.999 458.552 175.046 633.551 0.047 174.951-174.951 174.967-458.568-0.032-633.551zM286.603 538.596l58.338-58.338-131.688-5.072c-16.101 0-31.192-17.050-32.187-36.153-0.032-18.108 11.077-31.176 28.158-32.14l131.688 5.009-54.277-54.277 36.248-36.248 126.679 126.679-126.742 126.742-36.216-36.201zM815.819 486.326l-128.685-4.077 56.331 56.331-36.232 36.232-126.679-126.679 126.758-126.758 36.169 36.169-61.34 61.34 130.692 4.045c16.101 0 29.217 15.106 30.196 34.162-0.032 18.171-10.113 30.212-27.21 29.232zM488.259 703.972h47.404v-511.945h-47.404v511.945z" />
<glyph unicode="&#xe602;" glyph-name="restricted" data-tags="restricted" d="M511.992 959.937c-283.016 0-511.976-228.96-511.976-511.897 0-283.032 228.96-511.992 511.976-511.992 282.937 0 511.897 228.96 511.897 511.992 0 282.937-228.96 511.897-511.897 511.897zM63.979 448.055c0 247.369 200.534 447.934 448.029 447.934 109.866 0 210.441-39.614 288.357-105.252l-631.102-631.134c-65.654 77.932-105.284 178.538-105.284 288.452zM512.024 0.011c-109.913 0-210.52 39.614-288.468 105.284l631.134 631.134c65.638-77.932 105.268-178.491 105.268-288.373 0-247.479-200.549-448.044-447.934-448.044z" />
<glyph unicode="&#xe603;" glyph-name="edit" data-tags="edit" d="M999.966 815.419l-120.121 120.121c-31.84 31.84-83.478 31.84-115.318 0l-678.648-678.632-85.832-320.339 320.339 85.832 0.948-0.948 678.648 678.648c31.84 31.84 31.84 83.478-0.016 115.318zM107.401 93.617l34.162 127.5 143.049-143.049-127.5-34.162-49.711 49.711zM827.891 617.176l-146.304 146.304 120.184 120.184 146.304-146.304-120.184-120.184z" />
<glyph unicode="&#xe604;" glyph-name="ccv" data-tags="ccv" d="M688.988 466.963h169.086v-72.691h-169.086v72.691zM894.42 133.531h-820.148v420.346h434.568c15.802 33.185 36.346 63.21 61.63 86.914h-496.198v120.099h820.148v-66.37c26.864-12.642 50.568-28.444 72.691-47.407v109.037c0 22.123-9.481 39.506-25.284 55.309-15.802 14.222-25.284 22.123-47.407 22.123h-802.765c-22.123 0-50.568-7.901-66.37-22.123s-23.704-31.605-23.704-53.728v-616.296c0-22.123 7.901-42.667 23.704-56.889s44.247-22.123 66.37-22.123h804.346c22.123 0 31.605 7.901 47.407 22.123s23.704 36.346 23.704 56.889v71.111c-22.123-18.963-45.827-34.765-72.691-47.407v-31.605zM774.321 678.716c-137.481 0-248.099-110.617-248.099-248.099s110.617-248.099 248.099-248.099 248.099 110.617 248.099 248.099-112.198 248.099-248.099 248.099zM584.691 430.617c0 104.296 85.333 189.63 189.63 189.63s189.63-85.333 189.63-189.63-85.333-189.63-189.63-189.63-189.63 85.333-189.63 189.63zM224.395 466.963v-72.691h259.16c-1.58 12.642-3.16 23.704-3.16 36.346s1.58 23.704 3.16 36.346h-259.16z" />
</font></defs></svg>

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 49 KiB

BIN
assets/fonts/WooCommerce.ttf Normal file → Executable file

Binary file not shown.

BIN
assets/fonts/WooCommerce.woff Normal file → Executable file

Binary file not shown.

View File

@ -71,7 +71,9 @@ jQuery( function ( $ ) {
$state.replaceWith( '<input type="text" class="js_field-state" name="' + input_name + '" id="' + input_id + '" value="' + value + '" placeholder="' + placeholder + '" />' );
}
// This event has a typo - deprecated in 2.5.0
$( document.body ).trigger( 'contry-change.woocommerce', [country, $( this ).closest( 'div' )] );
$( document.body ).trigger( 'country-change.woocommerce', [country, $( this ).closest( 'div' )] );
},
change_state: function() {
@ -316,8 +318,8 @@ jQuery( function ( $ ) {
data: data,
type: 'POST',
success: function( response ) {
$( '#woocommerce-order-items .inside' ).empty();
$( '#woocommerce-order-items .inside' ).append( response );
$( '#woocommerce-order-items' ).find( '.inside' ).empty();
$( '#woocommerce-order-items' ).find( '.inside' ).append( response );
wc_meta_boxes_order.init_tiptip();
wc_meta_boxes_order_items.unblock();
wc_meta_boxes_order_items.stupidtable.init();
@ -384,7 +386,7 @@ jQuery( function ( $ ) {
$( 'div.wc-order-refund-items' ).slideDown();
$( 'div.wc-order-bulk-actions' ).slideUp();
$( 'div.wc-order-totals-items' ).slideUp();
$( '#woocommerce-order-items div.refund' ).show();
$( '#woocommerce-order-items' ).find( 'div.refund' ).show();
$( '.wc-order-edit-line-item .wc-order-edit-line-item-actions' ).hide();
return false;
},
@ -393,7 +395,7 @@ jQuery( function ( $ ) {
$( this ).closest( 'div.wc-order-data-row' ).slideUp();
$( 'div.wc-order-bulk-actions' ).slideDown();
$( 'div.wc-order-totals-items' ).slideDown();
$( '#woocommerce-order-items div.refund' ).hide();
$( '#woocommerce-order-items' ).find( 'div.refund' ).hide();
$( '.wc-order-edit-line-item .wc-order-edit-line-item-actions' ).show();
// Reload the items
@ -406,7 +408,7 @@ jQuery( function ( $ ) {
add_item: function() {
$( this ).WCBackboneModal({
template: '#wc-modal-add-products'
template: 'wc-modal-add-products'
});
return false;
@ -448,7 +450,7 @@ jQuery( function ( $ ) {
add_tax: function() {
$( this ).WCBackboneModal({
template: '#wc-modal-add-tax'
template: 'wc-modal-add-tax'
});
return false;
},
@ -506,8 +508,8 @@ jQuery( function ( $ ) {
data: data,
type: 'POST',
success: function( response ) {
$( '#woocommerce-order-items .inside' ).empty();
$( '#woocommerce-order-items .inside' ).append( response );
$( '#woocommerce-order-items' ).find( '.inside' ).empty();
$( '#woocommerce-order-items' ).find( '.inside' ).append( response );
wc_meta_boxes_order.init_tiptip();
wc_meta_boxes_order_items.unblock();
wc_meta_boxes_order_items.stupidtable.init();
@ -556,8 +558,8 @@ jQuery( function ( $ ) {
data: data,
type: 'POST',
success: function( response ) {
$( '#woocommerce-order-items .inside' ).empty();
$( '#woocommerce-order-items .inside' ).append( response );
$( '#woocommerce-order-items' ).find( '.inside' ).empty();
$( '#woocommerce-order-items' ).find( '.inside' ).append( response );
wc_meta_boxes_order.init_tiptip();
wc_meta_boxes_order_items.unblock();
wc_meta_boxes_order_items.stupidtable.init();
@ -626,8 +628,8 @@ jQuery( function ( $ ) {
data: data,
type: 'POST',
success: function( response ) {
$( '#woocommerce-order-items .inside' ).empty();
$( '#woocommerce-order-items .inside' ).append( response );
$( '#woocommerce-order-items' ).find( '.inside' ).empty();
$( '#woocommerce-order-items' ).find( '.inside' ).append( response );
wc_meta_boxes_order.init_tiptip();
wc_meta_boxes_order_items.unblock();
wc_meta_boxes_order_items.stupidtable.init();
@ -1001,13 +1003,13 @@ jQuery( function ( $ ) {
backbone: {
init: function( e, target ) {
if ( '#wc-modal-add-products' === target ) {
if ( 'wc-modal-add-products' === target ) {
$( document.body ).trigger( 'wc-enhanced-select-init' );
}
},
response: function( e, target, data ) {
if ( '#wc-modal-add-tax' === target ) {
if ( 'wc-modal-add-tax' === target ) {
var rate_id = data.add_order_tax;
var manual_rate_id = '';
@ -1017,7 +1019,7 @@ jQuery( function ( $ ) {
wc_meta_boxes_order_items.backbone.add_tax( rate_id, manual_rate_id );
}
if ( '#wc-modal-add-products' === target ) {
if ( 'wc-modal-add-products' === target ) {
wc_meta_boxes_order_items.backbone.add_item( data.add_order_items );
}
},
@ -1083,8 +1085,8 @@ jQuery( function ( $ ) {
data: data,
type: 'POST',
success: function( response ) {
$( '#woocommerce-order-items .inside' ).empty();
$( '#woocommerce-order-items .inside' ).append( response );
$( '#woocommerce-order-items' ).find( '.inside' ).empty();
$( '#woocommerce-order-items' ).find( '.inside' ).append( response );
wc_meta_boxes_order.init_tiptip();
wc_meta_boxes_order_items.unblock();
wc_meta_boxes_order_items.stupidtable.init();

File diff suppressed because one or more lines are too long

View File

@ -15,15 +15,24 @@ jQuery( function( $ ) {
.on( 'change', 'input.variable_is_virtual', this.variable_is_virtual )
.on( 'change', 'input.variable_manage_stock', this.variable_manage_stock )
.on( 'click', 'button.notice-dismiss', this.notice_dismiss )
.on( 'click', 'h3 .sort', this.set_menu_order );
.on( 'click', 'h3 .sort', this.set_menu_order )
.on( 'reload', this.reload );
$( 'input.variable_is_downloadable, input.variable_is_virtual, input.variable_manage_stock' ).change();
$( '#woocommerce-product-data' ).on( 'woocommerce_variations_loaded', this.variations_loaded );
$( document.body ).on( 'woocommerce_variations_added', this.variation_added );
},
/**
* Reload UI
*
* @param {Object} event
* @param {Int} qty
*/
reload: function() {
wc_meta_boxes_product_variations_ajax.load_variations( 1 );
},
/**
* Check if variation is downloadable and show/hide elements
*/
@ -66,34 +75,41 @@ jQuery( function( $ ) {
/**
* Run actions when variations is loaded
*
* @param {Object} event
* @param {Int} needsUpdate
*/
variations_loaded: function() {
variations_loaded: function( event, needsUpdate ) {
needsUpdate = needsUpdate || false;
var wrapper = $( '#woocommerce-product-data' );
// Show/hide downloadable, virtual and stock fields
$( 'input.variable_is_downloadable, input.variable_is_virtual, input.variable_manage_stock', wrapper ).change();
if ( ! needsUpdate ) {
// Show/hide downloadable, virtual and stock fields
$( 'input.variable_is_downloadable, input.variable_is_virtual, input.variable_manage_stock', wrapper ).change();
// Open sale schedule fields when have some sale price date
$( '.woocommerce_variation', wrapper ).each( function( index, el ) {
var $el = $( el ),
date_from = $( '.sale_price_dates_from', $el ).val(),
date_to = $( '.sale_price_dates_to', $el ).val();
// Open sale schedule fields when have some sale price date
$( '.woocommerce_variation', wrapper ).each( function( index, el ) {
var $el = $( el ),
date_from = $( '.sale_price_dates_from', $el ).val(),
date_to = $( '.sale_price_dates_to', $el ).val();
if ( '' !== date_from || '' !== date_to ) {
$( 'a.sale_schedule', $el ).click();
}
});
if ( '' !== date_from || '' !== date_to ) {
$( 'a.sale_schedule', $el ).click();
}
});
// Remove variation-needs-update classes
$( '.woocommerce_variations .variation-needs-update', wrapper ).removeClass( 'variation-needs-update' );
// Remove variation-needs-update classes
$( '.woocommerce_variations .variation-needs-update', wrapper ).removeClass( 'variation-needs-update' );
// Disable cancel and save buttons
$( 'button.cancel-variation-changes, button.save-variation-changes', wrapper ).attr( 'disabled', 'disabled' );
// Disable cancel and save buttons
$( 'button.cancel-variation-changes, button.save-variation-changes', wrapper ).attr( 'disabled', 'disabled' );
}
// Init TipTip
$( '#tiptip_holder' ).removeAttr( 'style' );
$( '#tiptip_arrow' ).removeAttr( 'style' );
$( '.woocommerce_variations .tips', wrapper ).tipTip({
$( '.woocommerce_variations .tips, .woocommerce_variations .help_tip', wrapper ).tipTip({
'attribute': 'data-tip',
'fadeIn': 50,
'fadeOut': 50,
@ -119,16 +135,16 @@ jQuery( function( $ ) {
});
// Allow sorting
jQuery( '.woocommerce_variations' ).sortable({
items : '.woocommerce_variation',
cursor : 'move',
axis : 'y',
handle : '.sort',
scrollSensitivity : 40,
$( '.woocommerce_variations', wrapper ).sortable({
items: '.woocommerce_variation',
cursor: 'move',
axis: 'y',
handle: '.sort',
scrollSensitivity: 40,
forcePlaceholderSize: true,
helper : 'clone',
opacity : 0.65,
stop : function () {
helper: 'clone',
opacity: 0.65,
stop: function() {
wc_meta_boxes_product_variations_actions.variation_row_indexes();
}
});
@ -139,12 +155,12 @@ jQuery( function( $ ) {
/**
* Run actions when added a variation
*
* @param {Object} event [description]
* @param {Object} event
* @param {Int} qty
*/
variation_added: function( event, qty ) {
if ( 1 === qty ) {
wc_meta_boxes_product_variations_actions.variations_loaded();
wc_meta_boxes_product_variations_actions.variations_loaded( null, true );
}
},
@ -167,7 +183,7 @@ jQuery( function( $ ) {
* Set menu order
*/
variation_row_indexes: function() {
var wrapper = $( '#variable_product_options .woocommerce_variations' ),
var wrapper = $( '#variable_product_options' ).find( '.woocommerce_variations' ),
current_page = parseInt( wrapper.attr( 'data-page' ), 10 ),
offset = parseInt( ( current_page - 1 ) * woocommerce_admin_meta_boxes_variations.variations_per_page, 10 );
@ -322,7 +338,7 @@ jQuery( function( $ ) {
* @return {Bool}
*/
check_for_changes: function() {
var need_update = $( '#variable_product_options .woocommerce_variations .variation-needs-update' );
var need_update = $( '#variable_product_options' ).find( '.woocommerce_variations .variation-needs-update' );
if ( 0 < need_update.length ) {
if ( window.confirm( woocommerce_admin_meta_boxes_variations.i18n_edited_variations ) ) {
@ -362,7 +378,7 @@ jQuery( function( $ ) {
* @return {Bool}
*/
initial_load: function() {
if ( 0 === $( '#variable_product_options .woocommerce_variations .woocommerce_variation' ).length ) {
if ( 0 === $( '#variable_product_options' ).find( '.woocommerce_variations .woocommerce_variation' ).length ) {
wc_meta_boxes_product_variations_pagenav.go_to_page();
}
},
@ -377,7 +393,7 @@ jQuery( function( $ ) {
page = page || 1;
per_page = per_page || woocommerce_admin_meta_boxes_variations.variations_per_page;
var wrapper = $( '#variable_product_options .woocommerce_variations' );
var wrapper = $( '#variable_product_options' ).find( '.woocommerce_variations' );
wc_meta_boxes_product_variations_ajax.block();
@ -423,10 +439,10 @@ jQuery( function( $ ) {
/**
* Save variations changes
*
* @param {Function} callback
* @param {Function} callback Called once saving is complete
*/
save_changes: function( callback ) {
var wrapper = $( '#variable_product_options .woocommerce_variations' ),
var wrapper = $( '#variable_product_options' ).find( '.woocommerce_variations' ),
need_update = $( '.variation-needs-update', wrapper ),
data = {};
@ -470,10 +486,10 @@ jQuery( function( $ ) {
$( '#variable_product_options' ).trigger( 'woocommerce_variations_save_variations_button' );
wc_meta_boxes_product_variations_ajax.save_changes( function( error ) {
var wrapper = $( '#variable_product_options .woocommerce_variations' ),
var wrapper = $( '#variable_product_options' ).find( '.woocommerce_variations' ),
current = wrapper.attr( 'data-page' );
$( '#variable_product_options #woocommerce_errors' ).remove();
$( '#variable_product_options' ).find( '#woocommerce_errors' ).remove();
if ( error ) {
wrapper.before( error );
@ -492,10 +508,21 @@ jQuery( function( $ ) {
/**
* Save on post form submit
*/
save_on_submit: function() {
$( '#variable_product_options' ).trigger( 'woocommerce_variations_save_variations_on_submit' );
save_on_submit: function( e ) {
var need_update = $( '#variable_product_options' ).find( '.woocommerce_variations .variation-needs-update' );
wc_meta_boxes_product_variations_ajax.save_changes();
if ( 0 < need_update.length ) {
e.preventDefault();
$( '#variable_product_options' ).trigger( 'woocommerce_variations_save_variations_on_submit' );
wc_meta_boxes_product_variations_ajax.save_changes( wc_meta_boxes_product_variations_ajax.save_on_submit_done );
}
},
/**
* After saved, continue with form submission
*/
save_on_submit_done: function() {
$( 'form#post' ).submit();
},
/**
@ -504,9 +531,9 @@ jQuery( function( $ ) {
* @return {Bool}
*/
cancel_variations: function() {
var current = parseInt( $( '#variable_product_options .woocommerce_variations' ).attr( 'data-page' ), 10 );
var current = parseInt( $( '#variable_product_options' ).find( '.woocommerce_variations' ).attr( 'data-page' ), 10 );
$( '#variable_product_options .woocommerce_variations .variation-needs-update' ).removeClass( 'variation-needs-update' );
$( '#variable_product_options' ).find( '.woocommerce_variations .variation-needs-update' ).removeClass( 'variation-needs-update' );
$( '.variations-defaults select' ).each( function() {
$( this ).val( $( this ).attr( 'data-current' ) );
});
@ -535,7 +562,7 @@ jQuery( function( $ ) {
var variation = $( response );
variation.addClass( 'variation-needs-update' );
$( '#variable_product_options .woocommerce_variations' ).prepend( variation );
$( '#variable_product_options' ).find( '.woocommerce_variations' ).prepend( variation );
$( 'button.cancel-variation-changes, button.save-variation-changes' ).removeAttr( 'disabled' );
$( '#variable_product_options' ).trigger( 'woocommerce_variations_added', 1 );
wc_meta_boxes_product_variations_ajax.unblock();
@ -568,7 +595,7 @@ jQuery( function( $ ) {
data.security = woocommerce_admin_meta_boxes_variations.delete_variations_nonce;
$.post( woocommerce_admin_meta_boxes_variations.ajax_url, data, function() {
var wrapper = $( '#variable_product_options .woocommerce_variations' ),
var wrapper = $( '#variable_product_options' ).find( '.woocommerce_variations' ),
current_page = parseInt( wrapper.attr( 'data-page' ), 10 ),
total_pages = Math.ceil( ( parseInt( wrapper.attr( 'data-total' ), 10 ) - 1 ) / woocommerce_admin_meta_boxes_variations.variations_per_page ),
page = 1;
@ -679,7 +706,7 @@ jQuery( function( $ ) {
if ( window.confirm( woocommerce_admin_meta_boxes_variations.i18n_delete_all_variations ) ) {
if ( window.confirm( woocommerce_admin_meta_boxes_variations.i18n_last_warning ) ) {
data.allowed = true;
changes = parseInt( $( '#variable_product_options .woocommerce_variations' ).attr( 'data-total' ), 10 ) * -1;
changes = parseInt( $( '#variable_product_options' ).find( '.woocommerce_variations' ).attr( 'data-total' ), 10 ) * -1;
}
}
break;
@ -731,7 +758,7 @@ jQuery( function( $ ) {
}
if ( 'delete_all' === do_variation_action && data.allowed ) {
$( '#variable_product_options .variation-needs-update' ).removeClass( 'variation-needs-update' );
$( '#variable_product_options' ).find( '.variation-needs-update' ).removeClass( 'variation-needs-update' );
} else {
wc_meta_boxes_product_variations_ajax.check_for_changes();
}
@ -781,7 +808,7 @@ jQuery( function( $ ) {
* @return {Int}
*/
update_variations_count: function( qty ) {
var wrapper = $( '#variable_product_options .woocommerce_variations' ),
var wrapper = $( '#variable_product_options' ).find( '.woocommerce_variations' ),
total = parseInt( wrapper.attr( 'data-total' ), 10 ) + qty,
displaying_num = $( '.variations-pagenav .displaying-num' );
@ -812,7 +839,7 @@ jQuery( function( $ ) {
if ( page_nav.is( ':hidden' ) ) {
$( 'option, optgroup', '.variation_actions' ).show();
$( '.variation_actions' ).val( 'add_variation' );
$( '#variable_product_options .toolbar' ).show();
$( '#variable_product_options' ).find( '.toolbar' ).show();
page_nav.show();
$( '.pagination-links', page_nav ).hide();
}
@ -825,9 +852,9 @@ jQuery( function( $ ) {
* @param {Int} qty
*/
set_paginav: function( qty ) {
var wrapper = $( '#variable_product_options .woocommerce_variations' ),
var wrapper = $( '#variable_product_options' ).find( '.woocommerce_variations' ),
new_qty = wc_meta_boxes_product_variations_pagenav.update_variations_count( qty ),
toolbar = $( '#variable_product_options .toolbar' ),
toolbar = $( '#variable_product_options' ).find( '.toolbar' ),
variation_action = $( '.variation_actions' ),
page_nav = $( '.variations-pagenav' ),
displaying_links = $( '.pagination-links', page_nav ),
@ -852,7 +879,7 @@ jQuery( function( $ ) {
page_nav.hide();
$( 'option, optgroup', variation_action ).hide();
$( '.variation_actions' ).val( 'add_variation' );
$( 'option', variation_action ).slice( 0, 2 ).show();
$( 'option[data-global="true"]', variation_action ).show();
} else {
toolbar.show();
@ -930,7 +957,7 @@ jQuery( function( $ ) {
*/
page_selector: function() {
var selected = parseInt( $( this ).val(), 10 ),
wrapper = $( '#variable_product_options .woocommerce_variations' );
wrapper = $( '#variable_product_options' ).find( '.woocommerce_variations' );
$( '.variations-pagenav .page-selector' ).val( selected );
@ -959,7 +986,7 @@ jQuery( function( $ ) {
*/
prev_page: function() {
if ( wc_meta_boxes_product_variations_pagenav.check_is_enabled( this ) ) {
var wrapper = $( '#variable_product_options .woocommerce_variations' ),
var wrapper = $( '#variable_product_options' ).find( '.woocommerce_variations' ),
prev_page = parseInt( wrapper.attr( 'data-page' ), 10 ) - 1,
new_page = ( 0 < prev_page ) ? prev_page : 1;
@ -976,7 +1003,7 @@ jQuery( function( $ ) {
*/
next_page: function() {
if ( wc_meta_boxes_product_variations_pagenav.check_is_enabled( this ) ) {
var wrapper = $( '#variable_product_options .woocommerce_variations' ),
var wrapper = $( '#variable_product_options' ).find( '.woocommerce_variations' ),
total_pages = parseInt( wrapper.attr( 'data-total_pages' ), 10 ),
next_page = parseInt( wrapper.attr( 'data-page' ), 10 ) + 1,
new_page = ( total_pages >= next_page ) ? next_page : total_pages;
@ -994,7 +1021,7 @@ jQuery( function( $ ) {
*/
last_page: function() {
if ( wc_meta_boxes_product_variations_pagenav.check_is_enabled( this ) ) {
var last_page = $( '#variable_product_options .woocommerce_variations' ).attr( 'data-total_pages' );
var last_page = $( '#variable_product_options' ).find( '.woocommerce_variations' ).attr( 'data-total_pages' );
wc_meta_boxes_product_variations_pagenav.set_page( last_page );
}

File diff suppressed because one or more lines are too long

View File

@ -30,7 +30,7 @@ jQuery( function( $ ) {
$( function() {
// Prevent inputs in meta box headings opening/closing contents
$( '#woocommerce-product-data h3.hndle' ).unbind( 'click.postboxes' );
$( '#woocommerce-product-data' ).find( 'h3.hndle' ).unbind( 'click.postboxes' );
jQuery( '#woocommerce-product-data' ).on( 'click', 'h3.hndle', function( event ) {
@ -44,16 +44,16 @@ jQuery( function( $ ) {
});
// Catalog Visibility
$( '#catalog-visibility .edit-catalog-visibility' ).click( function () {
if ( $( '#catalog-visibility-select').is( ':hidden' ) ) {
$( '#catalog-visibility' ).find( '.edit-catalog-visibility' ).click( function () {
if ( $( '#catalog-visibility-select' ).is( ':hidden' ) ) {
$( '#catalog-visibility-select' ).slideDown( 'fast' );
$( this ).hide();
}
return false;
});
$('#catalog-visibility .save-post-visibility').click( function () {
$('#catalog-visibility-select').slideUp( 'fast' );
$('#catalog-visibility .edit-catalog-visibility').show();
$( '#catalog-visibility' ).find( '.save-post-visibility' ).click( function () {
$( '#catalog-visibility-select' ).slideUp( 'fast' );
$( '#catalog-visibility' ).find( '.edit-catalog-visibility' ).show();
var label = $( 'input[name=_visibility]:checked' ).attr( 'data-label' );
@ -65,9 +65,9 @@ jQuery( function( $ ) {
$( '#catalog-visibility-display' ).text( label );
return false;
});
$( '#catalog-visibility .cancel-post-visibility' ).click( function () {
$( '#catalog-visibility' ).find( '.cancel-post-visibility' ).click( function () {
$( '#catalog-visibility-select' ).slideUp( 'fast' );
$( '#catalog-visibility .edit-catalog-visibility' ).show();
$( '#catalog-visibility' ).find( '.edit-catalog-visibility' ).show();
var current_visibility = $( '#current_visibility' ).val();
var current_featured = $( '#current_featured' ).val();
@ -115,7 +115,7 @@ jQuery( function( $ ) {
}).change();
$( document.body ).on( 'woocommerce-product-type-change', function( e, select_val ) {
if ( 'variable' !== select_val && 0 < $( '#variable_product_options input[name^=variable_sku]' ).length && $( document.body ).triggerHandler( 'woocommerce-display-product-type-alert', select_val ) !== false ) {
if ( 'variable' !== select_val && 0 < $( '#variable_product_options' ).find( 'input[name^=variable_sku]' ).length && $( document.body ).triggerHandler( 'woocommerce-display-product-type-alert', select_val ) !== false ) {
window.alert( woocommerce_admin_meta_boxes.i18n_product_type_alert );
}
});
@ -404,7 +404,7 @@ jQuery( function( $ ) {
// Save attributes and update variations
$( '.save_attributes' ).on( 'click', function() {
$( '.product_attributes' ).block({
$( '#woocommerce-product-data' ).block({
message: null,
overlayCSS: {
background: '#fff',
@ -420,16 +420,14 @@ jQuery( function( $ ) {
};
$.post( woocommerce_admin_meta_boxes.ajax_url, data, function() {
// Reload variations panel
var this_page = window.location.toString();
this_page = this_page.replace( 'post-new.php?', 'post.php?post=' + woocommerce_admin_meta_boxes.post_id + '&action=edit&' );
// Load variations panel
$( '#variable_product_options' ).block({ message: null, overlayCSS: { background: '#fff', opacity: 0.6 } });
$( '#variable_product_options' ).load( this_page + ' #variable_product_options_inner', function() {
$( '#variable_product_options' ).unblock();
$( '#variable_product_options' ).trigger( 'reload' );
});
$( '.product_attributes' ).unblock();
});
});
@ -516,7 +514,7 @@ jQuery( function( $ ) {
// Product gallery file uploads
var product_gallery_frame;
var $image_gallery_ids = $( '#product_image_gallery' );
var $product_images = $( '#product_images_container ul.product_images' );
var $product_images = $( '#product_images_container' ).find( 'ul.product_images' );
jQuery( '.add_product_images' ).on( 'click', 'a', function( event ) {
var $el = $( this );
@ -555,7 +553,7 @@ jQuery( function( $ ) {
if ( attachment.id ) {
attachment_ids = attachment_ids ? attachment_ids + ',' + attachment.id : attachment.id;
var attachment_image = attachment.sizes.thumbnail ? attachment.sizes.thumbnail.url : attachment.url;
var attachment_image = attachment.sizes && attachment.sizes.thumbnail ? attachment.sizes.thumbnail.url : attachment.url;
$product_images.append( '<li class="image" data-attachment_id="' + attachment.id + '"><img src="' + attachment_image + '" /><ul class="actions"><li><a href="#" class="delete" title="' + $el.data('delete') + '">' + $el.data('text') + '</a></li></ul></li>' );
}
@ -587,7 +585,7 @@ jQuery( function( $ ) {
update: function() {
var attachment_ids = '';
$( '#product_images_container ul li.image' ).css( 'cursor', 'default' ).each( function() {
$( '#product_images_container' ).find( 'ul li.image' ).css( 'cursor', 'default' ).each( function() {
var attachment_id = jQuery( this ).attr( 'data-attachment_id' );
attachment_ids = attachment_ids + attachment_id + ',';
});
@ -602,7 +600,7 @@ jQuery( function( $ ) {
var attachment_ids = '';
$( '#product_images_container ul li.image' ).css( 'cursor', 'default' ).each( function() {
$( '#product_images_container' ).find( 'ul li.image' ).css( 'cursor', 'default' ).each( function() {
var attachment_id = jQuery( this ).attr( 'data-attachment_id' );
attachment_ids = attachment_ids + attachment_id + ',';
});

File diff suppressed because one or more lines are too long

View File

@ -16,7 +16,7 @@ jQuery( function ( $ ) {
runTipTip();
// Allow Tabbing
$( '#titlediv #title' ).keyup( function( event ) {
$( '#titlediv' ).find( '#title' ).keyup( function( event ) {
var code = event.keyCode || event.which;
// Tab key
@ -27,22 +27,20 @@ jQuery( function ( $ ) {
}
});
$( function() {
$( '.wc-metabox > h3' ).click( function() {
$( this ).parent( '.wc-metabox' ).toggleClass( 'closed' ).toggleClass( 'open' );
});
$( '.wc-metaboxes-wrapper' ).on( 'click', '.wc-metabox > h3', function() {
$( this ).parent( '.wc-metabox' ).toggleClass( 'closed' ).toggleClass( 'open' );
});
// Tabbed Panels
$( document.body ).on( 'wc-init-tabbed-panels', function() {
$( 'ul.wc-tabs' ).show();
$( 'ul.wc-tabs a' ).click( function() {
$( 'ul.wc-tabs a' ).click( function( e ) {
e.preventDefault();
var panel_wrap = $( this ).closest( 'div.panel-wrap' );
$( 'ul.wc-tabs li', panel_wrap ).removeClass( 'active' );
$( this ).parent().addClass( 'active' );
$( 'div.panel', panel_wrap ).hide();
$( $( this ).attr( 'href' ) ).show();
return false;
});
$( 'div.panel-wrap' ).each( function() {
$( this ).find( 'ul.wc-tabs li' ).eq( 0 ).find( 'a' ).click();

View File

@ -1 +1 @@
jQuery(function(a){function b(){a("#tiptip_holder").removeAttr("style"),a("#tiptip_arrow").removeAttr("style"),a(".tips").tipTip({attribute:"data-tip",fadeIn:50,fadeOut:50,delay:200})}b(),a("#titlediv #title").keyup(function(b){var c=b.keyCode||b.which;return"9"===c&&a("#woocommerce-coupon-description").size()>0?(b.stopPropagation(),a("#woocommerce-coupon-description").focus(),!1):void 0}),a(function(){a(".wc-metabox > h3").click(function(){a(this).parent(".wc-metabox").toggleClass("closed").toggleClass("open")})}),a(document.body).on("wc-init-tabbed-panels",function(){a("ul.wc-tabs").show(),a("ul.wc-tabs a").click(function(){var b=a(this).closest("div.panel-wrap");return a("ul.wc-tabs li",b).removeClass("active"),a(this).parent().addClass("active"),a("div.panel",b).hide(),a(a(this).attr("href")).show(),!1}),a("div.panel-wrap").each(function(){a(this).find("ul.wc-tabs li").eq(0).find("a").click()})}).trigger("wc-init-tabbed-panels"),a(document.body).on("wc-init-datepickers",function(){a(".date-picker-field, .date-picker").datepicker({dateFormat:"yy-mm-dd",numberOfMonths:1,showButtonPanel:!0})}).trigger("wc-init-datepickers"),a(".wc-metaboxes-wrapper").on("click",".wc-metabox h3",function(b){a(b.target).filter(":input, option, .sort").length||a(this).next(".wc-metabox-content").stop().slideToggle()}).on("click",".expand_all",function(){return a(this).closest(".wc-metaboxes-wrapper").find(".wc-metabox > .wc-metabox-content").show(),!1}).on("click",".close_all",function(){return a(this).closest(".wc-metaboxes-wrapper").find(".wc-metabox > .wc-metabox-content").hide(),!1}),a(".wc-metabox.closed").each(function(){a(this).find(".wc-metabox-content").hide()})});
jQuery(function(a){function b(){a("#tiptip_holder").removeAttr("style"),a("#tiptip_arrow").removeAttr("style"),a(".tips").tipTip({attribute:"data-tip",fadeIn:50,fadeOut:50,delay:200})}b(),a("#titlediv").find("#title").keyup(function(b){var c=b.keyCode||b.which;return"9"===c&&a("#woocommerce-coupon-description").size()>0?(b.stopPropagation(),a("#woocommerce-coupon-description").focus(),!1):void 0}),a(".wc-metaboxes-wrapper").on("click",".wc-metabox > h3",function(){a(this).parent(".wc-metabox").toggleClass("closed").toggleClass("open")}),a(document.body).on("wc-init-tabbed-panels",function(){a("ul.wc-tabs").show(),a("ul.wc-tabs a").click(function(b){b.preventDefault();var c=a(this).closest("div.panel-wrap");a("ul.wc-tabs li",c).removeClass("active"),a(this).parent().addClass("active"),a("div.panel",c).hide(),a(a(this).attr("href")).show()}),a("div.panel-wrap").each(function(){a(this).find("ul.wc-tabs li").eq(0).find("a").click()})}).trigger("wc-init-tabbed-panels"),a(document.body).on("wc-init-datepickers",function(){a(".date-picker-field, .date-picker").datepicker({dateFormat:"yy-mm-dd",numberOfMonths:1,showButtonPanel:!0})}).trigger("wc-init-datepickers"),a(".wc-metaboxes-wrapper").on("click",".wc-metabox h3",function(b){a(b.target).filter(":input, option, .sort").length||a(this).next(".wc-metabox-content").stop().slideToggle()}).on("click",".expand_all",function(){return a(this).closest(".wc-metaboxes-wrapper").find(".wc-metabox > .wc-metabox-content").show(),!1}).on("click",".close_all",function(){return a(this).closest(".wc-metaboxes-wrapper").find(".wc-metabox > .wc-metabox-content").hide(),!1}),a(".wc-metabox.closed").each(function(){a(this).find(".wc-metabox-content").hide()})});

View File

@ -25,7 +25,8 @@
if ( settings.template ) {
new $.WCBackboneModal.View({
target: settings.template
target: settings.template,
string: settings.variable
});
}
};
@ -36,7 +37,8 @@
* @type {object}
*/
$.WCBackboneModal.defaultOptions = {
template: ''
template: '',
variable: {}
};
/**
@ -48,6 +50,7 @@
tagName: 'div',
id: 'wc-backbone-modal-dialog',
_target: undefined,
_string: undefined,
events: {
'click .modal-close': 'closeButton',
'click #btn-ok': 'addButton',
@ -55,11 +58,16 @@
},
initialize: function( data ) {
this._target = data.target;
this._string = data.string;
_.bindAll( this, 'render' );
this.render();
},
render: function() {
this.$el.attr( 'tabindex' , '0' ).append( $( this._target ).html() );
var template = wp.template( this._target );
this.$el.attr( 'tabindex' , '0' ).append(
template( this._string )
);
$( document.body ).css({
'overflow': 'hidden'

View File

@ -1 +1 @@
!function(a,b,c){"use strict";a.fn.WCBackboneModal=function(b){return this.each(function(){new a.WCBackboneModal(a(this),b)})},a.WCBackboneModal=function(b,c){var d=a.extend({},a.WCBackboneModal.defaultOptions,c);d.template&&new a.WCBackboneModal.View({target:d.template})},a.WCBackboneModal.defaultOptions={template:""},a.WCBackboneModal.View=b.View.extend({tagName:"div",id:"wc-backbone-modal-dialog",_target:void 0,events:{"click .modal-close":"closeButton","click #btn-ok":"addButton",keydown:"keyboardActions"},initialize:function(a){this._target=a.target,c.bindAll(this,"render"),this.render()},render:function(){this.$el.attr("tabindex","0").append(a(this._target).html()),a(document.body).css({overflow:"hidden"}).append(this.$el);var b=a(".wc-backbone-modal-content").find("article"),c=b.height()<90?90:b.height(),d=a(window).height()-200;d>400&&(d=400),c>d?b.css({overflow:"auto",height:d+"px"}):b.css({overflow:"visible",height:c>90?"auto":c+"px"}),a(".wc-backbone-modal-content").css({"margin-top":"-"+a(".wc-backbone-modal-content").height()/2+"px","margin-left":"-"+a(".wc-backbone-modal-content").width()/2+"px"}),a(document.body).trigger("wc_backbone_modal_loaded",this._target)},closeButton:function(b){b.preventDefault(),a(document.body).trigger("wc_backbone_modal_before_remove",this._target),this.undelegateEvents(),a(document).off("focusin"),a(document.body).css({overflow:"auto"}),this.remove(),a(document.body).trigger("wc_backbone_modal_removed",this._target)},addButton:function(b){a(document.body).trigger("wc_backbone_modal_response",[this._target,this.getFormData()]),this.closeButton(b)},getFormData:function(){var b={};return a(document.body).trigger("wc_backbone_modal_before_update",this._target),a.each(a("form",this.$el).serializeArray(),function(c,d){b.hasOwnProperty(d.name)?(b[d.name]=a.makeArray(b[d.name]),b[d.name].push(d.value)):b[d.name]=d.value}),b},keyboardActions:function(a){var b=a.keyCode||a.which;13!==b||a.target.tagName&&("input"===a.target.tagName.toLowerCase()||"textarea"===a.target.tagName.toLowerCase())||this.addButton(a),27===b&&this.closeButton(a)}})}(jQuery,Backbone,_);
!function(a,b,c){"use strict";a.fn.WCBackboneModal=function(b){return this.each(function(){new a.WCBackboneModal(a(this),b)})},a.WCBackboneModal=function(b,c){var d=a.extend({},a.WCBackboneModal.defaultOptions,c);d.template&&new a.WCBackboneModal.View({target:d.template,string:d.variable})},a.WCBackboneModal.defaultOptions={template:"",variable:{}},a.WCBackboneModal.View=b.View.extend({tagName:"div",id:"wc-backbone-modal-dialog",_target:void 0,_string:void 0,events:{"click .modal-close":"closeButton","click #btn-ok":"addButton",keydown:"keyboardActions"},initialize:function(a){this._target=a.target,this._string=a.string,c.bindAll(this,"render"),this.render()},render:function(){var b=wp.template(this._target);this.$el.attr("tabindex","0").append(b(this._string)),a(document.body).css({overflow:"hidden"}).append(this.$el);var c=a(".wc-backbone-modal-content").find("article"),d=c.height()<90?90:c.height(),e=a(window).height()-200;e>400&&(e=400),d>e?c.css({overflow:"auto",height:e+"px"}):c.css({overflow:"visible",height:d>90?"auto":d+"px"}),a(".wc-backbone-modal-content").css({"margin-top":"-"+a(".wc-backbone-modal-content").height()/2+"px","margin-left":"-"+a(".wc-backbone-modal-content").width()/2+"px"}),a(document.body).trigger("wc_backbone_modal_loaded",this._target)},closeButton:function(b){b.preventDefault(),a(document.body).trigger("wc_backbone_modal_before_remove",this._target),this.undelegateEvents(),a(document).off("focusin"),a(document.body).css({overflow:"auto"}),this.remove(),a(document.body).trigger("wc_backbone_modal_removed",this._target)},addButton:function(b){a(document.body).trigger("wc_backbone_modal_response",[this._target,this.getFormData()]),this.closeButton(b)},getFormData:function(){var b={};return a(document.body).trigger("wc_backbone_modal_before_update",this._target),a.each(a("form",this.$el).serializeArray(),function(c,d){b.hasOwnProperty(d.name)?(b[d.name]=a.makeArray(b[d.name]),b[d.name].push(d.value)):b[d.name]=d.value}),b},keyboardActions:function(a){var b=a.keyCode||a.which;13!==b||a.target.tagName&&("input"===a.target.tagName.toLowerCase()||"textarea"===a.target.tagName.toLowerCase())||this.addButton(a),27===b&&this.closeButton(a)}})}(jQuery,Backbone,_);

View File

@ -42,11 +42,10 @@ jQuery(function( $ ) {
$( 'input[name="_stock"]', '.inline-edit-row' ).val( stock );
$( 'input[name="menu_order"]', '.inline-edit-row' ).val( menu_order );
$( 'select[name="_tax_status"] option, select[name="_tax_class"] option, select[name="_visibility"] option, select[name="_stock_status"] option, select[name="_backorders"] option' ).removeAttr( 'selected' );
$( 'select[name="_tax_status"] option[value="' + tax_status + '"]', '.inline-edit-row' ).attr( 'selected', 'selected' );
$( 'select[name="_tax_class"] option[value="' + tax_class + '"]', '.inline-edit-row' ).attr( 'selected', 'selected' );
$( 'select[name="_visibility"] option, select[name="_stock_status"] option, select[name="_backorders"] option' ).removeAttr( 'selected' );
$( 'select[name="_visibility"] option[value="' + visibility + '"]', '.inline-edit-row' ).attr( 'selected', 'selected' );
$( 'select[name="_stock_status"] option[value="' + stock_status + '"]', '.inline-edit-row' ).attr( 'selected', 'selected' );
$( 'select[name="_backorders"] option[value="' + backorders + '"]', '.inline-edit-row' ).attr( 'selected', 'selected' );
@ -100,8 +99,8 @@ jQuery(function( $ ) {
$( '#wpbody' ).on( 'click', '#doaction, #doaction2', function() {
$( 'input.text', '.inline-edit-row' ).val( '' );
$( '#woocommerce-fields select' ).prop( 'selectedIndex', 0 );
$( '#woocommerce-fields-bulk .inline-edit-group .change-input' ).hide();
$( '#woocommerce-fields' ).find( 'select' ).prop( 'selectedIndex', 0 );
$( '#woocommerce-fields-bulk' ).find( '.inline-edit-group .change-input' ).hide();
// Autosuggest product tags on bulk edit
var tax = 'product_tag';

View File

@ -1 +1 @@
jQuery(function(a){a("#the-list").on("click",".editinline",function(){inlineEditPost.revert();var b=a(this).closest("tr").attr("id");b=b.replace("post-","");var c=a("#woocommerce_inline_"+b),d=c.find(".sku").text(),e=c.find(".regular_price").text(),f=c.find(".sale_price ").text(),g=c.find(".weight").text(),h=c.find(".length").text(),i=c.find(".width").text(),j=c.find(".height").text(),k=c.find(".shipping_class").text(),l=c.find(".visibility").text(),m=c.find(".stock_status").text(),n=c.find(".stock").text(),o=c.find(".featured").text(),p=c.find(".manage_stock").text(),q=c.find(".menu_order").text(),r=c.find(".tax_status").text(),s=c.find(".tax_class").text(),t=c.find(".backorders").text();a('input[name="_sku"]',".inline-edit-row").val(d),a('input[name="_regular_price"]',".inline-edit-row").val(e),a('input[name="_sale_price"]',".inline-edit-row").val(f),a('input[name="_weight"]',".inline-edit-row").val(g),a('input[name="_length"]',".inline-edit-row").val(h),a('input[name="_width"]',".inline-edit-row").val(i),a('input[name="_height"]',".inline-edit-row").val(j),a('select[name="_shipping_class"] option:selected',".inline-edit-row").attr("selected",!1).change(),a('select[name="_shipping_class"] option[value="'+k+'"]').attr("selected","selected").change(),a('input[name="_stock"]',".inline-edit-row").val(n),a('input[name="menu_order"]',".inline-edit-row").val(q),a('select[name="_tax_status"] option[value="'+r+'"]',".inline-edit-row").attr("selected","selected"),a('select[name="_tax_class"] option[value="'+s+'"]',".inline-edit-row").attr("selected","selected"),a('select[name="_visibility"] option, select[name="_stock_status"] option, select[name="_backorders"] option').removeAttr("selected"),a('select[name="_visibility"] option[value="'+l+'"]',".inline-edit-row").attr("selected","selected"),a('select[name="_stock_status"] option[value="'+m+'"]',".inline-edit-row").attr("selected","selected"),a('select[name="_backorders"] option[value="'+t+'"]',".inline-edit-row").attr("selected","selected"),"yes"===o?a('input[name="_featured"]',".inline-edit-row").attr("checked","checked"):a('input[name="_featured"]',".inline-edit-row").removeAttr("checked"),"yes"===p?(a(".stock_qty_field",".inline-edit-row").show().removeAttr("style"),a('input[name="_manage_stock"]',".inline-edit-row").attr("checked","checked")):(a(".stock_qty_field",".inline-edit-row").hide(),a('input[name="_manage_stock"]',".inline-edit-row").removeAttr("checked"));var u=c.find(".product_type").text(),v=c.find(".product_is_virtual").text();"simple"===u||"external"===u?a(".price_fields",".inline-edit-row").show().removeAttr("style"):a(".price_fields",".inline-edit-row").hide(),"yes"===v?a(".dimension_fields",".inline-edit-row").hide():a(".dimension_fields",".inline-edit-row").show().removeAttr("style"),"grouped"===u?a(".stock_fields",".inline-edit-row").hide():a(".stock_fields",".inline-edit-row").show().removeAttr("style")}),a("#the-list").on("change",'.inline-edit-row input[name="_manage_stock"]',function(){a(this).is(":checked")?a(".stock_qty_field",".inline-edit-row").show().removeAttr("style"):a(".stock_qty_field",".inline-edit-row").hide()}),a("#wpbody").on("click","#doaction, #doaction2",function(){a("input.text",".inline-edit-row").val(""),a("#woocommerce-fields select").prop("selectedIndex",0),a("#woocommerce-fields-bulk .inline-edit-group .change-input").hide();var b="product_tag";a('tr.inline-editor textarea[name="tax_input['+b+']"]').suggest(ajaxurl+"?action=ajax-tag-search&tax="+b,{delay:500,minchars:2,multiple:!0,multipleSep:inlineEditL10n.comma})}),a("#wpbody").on("change","#woocommerce-fields-bulk .inline-edit-group .change_to",function(){0<a(this).val()?a(this).closest("div").find(".change-input").show():a(this).closest("div").find(".change-input").hide()})});
jQuery(function(a){a("#the-list").on("click",".editinline",function(){inlineEditPost.revert();var b=a(this).closest("tr").attr("id");b=b.replace("post-","");var c=a("#woocommerce_inline_"+b),d=c.find(".sku").text(),e=c.find(".regular_price").text(),f=c.find(".sale_price ").text(),g=c.find(".weight").text(),h=c.find(".length").text(),i=c.find(".width").text(),j=c.find(".height").text(),k=c.find(".shipping_class").text(),l=c.find(".visibility").text(),m=c.find(".stock_status").text(),n=c.find(".stock").text(),o=c.find(".featured").text(),p=c.find(".manage_stock").text(),q=c.find(".menu_order").text(),r=c.find(".tax_status").text(),s=c.find(".tax_class").text(),t=c.find(".backorders").text();a('input[name="_sku"]',".inline-edit-row").val(d),a('input[name="_regular_price"]',".inline-edit-row").val(e),a('input[name="_sale_price"]',".inline-edit-row").val(f),a('input[name="_weight"]',".inline-edit-row").val(g),a('input[name="_length"]',".inline-edit-row").val(h),a('input[name="_width"]',".inline-edit-row").val(i),a('input[name="_height"]',".inline-edit-row").val(j),a('select[name="_shipping_class"] option:selected',".inline-edit-row").attr("selected",!1).change(),a('select[name="_shipping_class"] option[value="'+k+'"]').attr("selected","selected").change(),a('input[name="_stock"]',".inline-edit-row").val(n),a('input[name="menu_order"]',".inline-edit-row").val(q),a('select[name="_tax_status"] option, select[name="_tax_class"] option, select[name="_visibility"] option, select[name="_stock_status"] option, select[name="_backorders"] option').removeAttr("selected"),a('select[name="_tax_status"] option[value="'+r+'"]',".inline-edit-row").attr("selected","selected"),a('select[name="_tax_class"] option[value="'+s+'"]',".inline-edit-row").attr("selected","selected"),a('select[name="_visibility"] option[value="'+l+'"]',".inline-edit-row").attr("selected","selected"),a('select[name="_stock_status"] option[value="'+m+'"]',".inline-edit-row").attr("selected","selected"),a('select[name="_backorders"] option[value="'+t+'"]',".inline-edit-row").attr("selected","selected"),"yes"===o?a('input[name="_featured"]',".inline-edit-row").attr("checked","checked"):a('input[name="_featured"]',".inline-edit-row").removeAttr("checked"),"yes"===p?(a(".stock_qty_field",".inline-edit-row").show().removeAttr("style"),a('input[name="_manage_stock"]',".inline-edit-row").attr("checked","checked")):(a(".stock_qty_field",".inline-edit-row").hide(),a('input[name="_manage_stock"]',".inline-edit-row").removeAttr("checked"));var u=c.find(".product_type").text(),v=c.find(".product_is_virtual").text();"simple"===u||"external"===u?a(".price_fields",".inline-edit-row").show().removeAttr("style"):a(".price_fields",".inline-edit-row").hide(),"yes"===v?a(".dimension_fields",".inline-edit-row").hide():a(".dimension_fields",".inline-edit-row").show().removeAttr("style"),"grouped"===u?a(".stock_fields",".inline-edit-row").hide():a(".stock_fields",".inline-edit-row").show().removeAttr("style")}),a("#the-list").on("change",'.inline-edit-row input[name="_manage_stock"]',function(){a(this).is(":checked")?a(".stock_qty_field",".inline-edit-row").show().removeAttr("style"):a(".stock_qty_field",".inline-edit-row").hide()}),a("#wpbody").on("click","#doaction, #doaction2",function(){a("input.text",".inline-edit-row").val(""),a("#woocommerce-fields").find("select").prop("selectedIndex",0),a("#woocommerce-fields-bulk").find(".inline-edit-group .change-input").hide();var b="product_tag";a('tr.inline-editor textarea[name="tax_input['+b+']"]').suggest(ajaxurl+"?action=ajax-tag-search&tax="+b,{delay:500,minchars:2,multiple:!0,multipleSep:inlineEditL10n.comma})}),a("#wpbody").on("change","#woocommerce-fields-bulk .inline-edit-group .change_to",function(){0<a(this).val()?a(this).closest("div").find(".change-input").show():a(this).closest("div").find(".change-input").hide()})});

View File

@ -62,7 +62,9 @@ jQuery( function ( $ ) {
$state.replaceWith( '<input type="text" class="js_field-state" name="' + input_name + '" id="' + input_id + '" value="' + value + '" />' );
}
// This event has a typo - deprecated in 2.5.0
$( document.body ).trigger( 'contry-change.woocommerce', [country, $( this ).closest( 'div' )] );
$( document.body ).trigger( 'country-change.woocommerce', [country, $( this ).closest( 'div' )] );
},
change_state: function() {

View File

@ -1 +1 @@
jQuery(function(a){var b={states:null,init:function(){"undefined"!=typeof wc_users_params.countries&&(this.states=a.parseJSON(wc_users_params.countries.replace(/&quot;/g,'"'))),a(".js_field-country").select2().change(this.change_country),a(".js_field-country").trigger("change",[!0]),a(document.body).on("change","select.js_field-state",this.change_state)},change_country:function(c,d){if("undefined"==typeof d&&(d=!1),null!==b.states){var e=a(this),f=e.val(),g=e.parents(".form-table").find(":input.js_field-state"),h=g.parent(),i=g.attr("name"),j=g.attr("id"),k=e.data("woocommerce.stickState-"+f)?e.data("woocommerce.stickState-"+f):g.val();if(d&&e.data("woocommerce.stickState-"+f,k),h.show().find(".select2-container").remove(),a.isEmptyObject(b.states[f]))g.replaceWith('<input type="text" class="js_field-state" name="'+i+'" id="'+j+'" value="'+k+'" />');else{var l=a('<select name="'+i+'" id="'+j+'" class="js_field-state" style="width: 25em;"></select>'),m=b.states[f];l.append(a('<option value="">'+wc_users_params.i18n_select_state_text+"</option>")),a.each(m,function(b){l.append(a('<option value="'+b+'">'+m[b]+"</option>"))}),l.val(k),g.replaceWith(l),l.show().select2().hide().change()}a(document.body).trigger("contry-change.woocommerce",[f,a(this).closest("div")])}},change_state:function(){var b=a(this),c=b.val(),d=b.parents(".form-table").find(":input.js_field-country"),e=d.val();d.data("woocommerce.stickState-"+e,c)}};b.init()});
jQuery(function(a){var b={states:null,init:function(){"undefined"!=typeof wc_users_params.countries&&(this.states=a.parseJSON(wc_users_params.countries.replace(/&quot;/g,'"'))),a(".js_field-country").select2().change(this.change_country),a(".js_field-country").trigger("change",[!0]),a(document.body).on("change","select.js_field-state",this.change_state)},change_country:function(c,d){if("undefined"==typeof d&&(d=!1),null!==b.states){var e=a(this),f=e.val(),g=e.parents(".form-table").find(":input.js_field-state"),h=g.parent(),i=g.attr("name"),j=g.attr("id"),k=e.data("woocommerce.stickState-"+f)?e.data("woocommerce.stickState-"+f):g.val();if(d&&e.data("woocommerce.stickState-"+f,k),h.show().find(".select2-container").remove(),a.isEmptyObject(b.states[f]))g.replaceWith('<input type="text" class="js_field-state" name="'+i+'" id="'+j+'" value="'+k+'" />');else{var l=a('<select name="'+i+'" id="'+j+'" class="js_field-state" style="width: 25em;"></select>'),m=b.states[f];l.append(a('<option value="">'+wc_users_params.i18n_select_state_text+"</option>")),a.each(m,function(b){l.append(a('<option value="'+b+'">'+m[b]+"</option>"))}),l.val(k),g.replaceWith(l),l.show().select2().hide().change()}a(document.body).trigger("contry-change.woocommerce",[f,a(this).closest("div")]),a(document.body).trigger("country-change.woocommerce",[f,a(this).closest("div")])}},change_state:function(){var b=a(this),c=b.val(),d=b.parents(".form-table").find(":input.js_field-country"),e=d.val();d.data("woocommerce.stickState-"+e,c)}};b.init()});

View File

@ -53,4 +53,15 @@ jQuery(function( $ ) {
}
}).change();
$('.button-next').on( 'click', function() {
$('.wc-setup-content').block({
message: null,
overlayCSS: {
background: '#fff',
opacity: 0.6
}
});
return true;
});
});

View File

@ -1 +1 @@
jQuery(function(a){var b=a.parseJSON(wc_setup_params.locale_info);a('select[name="store_location"]').change(function(){var c=a(this).val(),d=c.split(":")[0],e=b[d],f=["thousand_sep","decimal_sep","num_decimals","currency_pos"];e?a.each(e,function(b,c){a(':input[name="'+b+'"]').val(c).change(),-1!==a.inArray(b,f)&&a(':input[name="'+b+'"]').closest("tr").hide()}):(a(':input[name="currency_pos"]').closest("tr").show(),a(':input[name="thousand_sep"]').closest("tr").show(),a(':input[name="decimal_sep"]').closest("tr").show(),a(':input[name="num_decimals"]').closest("tr").show())}).change(),a('input[name="woocommerce_calc_shipping"]').change(function(){a(this).is(":checked")?(a(':input[name="shipping_cost_domestic"]').closest("tr").show(),a(':input[name="shipping_cost_international"]').closest("tr").show()):(a(':input[name="shipping_cost_domestic"]').closest("tr").hide(),a(':input[name="shipping_cost_international"]').closest("tr").hide())}).change(),a('input[name="woocommerce_calc_taxes"]').change(function(){a(this).is(":checked")?(a(':input[name="woocommerce_prices_include_tax"], :input[name="woocommerce_import_tax_rates"]').closest("tr").show(),a("tr.tax-rates").show()):(a(':input[name="woocommerce_prices_include_tax"], :input[name="woocommerce_import_tax_rates"]').closest("tr").hide(),a("tr.tax-rates").hide())}).change(),a('input[name="woocommerce_import_tax_rates"]').change(function(){a(this).is(":checked")?a(".importing-tax-rates").show():a(".importing-tax-rates").hide()}).change()});
jQuery(function(a){var b=a.parseJSON(wc_setup_params.locale_info);a('select[name="store_location"]').change(function(){var c=a(this).val(),d=c.split(":")[0],e=b[d],f=["thousand_sep","decimal_sep","num_decimals","currency_pos"];e?a.each(e,function(b,c){a(':input[name="'+b+'"]').val(c).change(),-1!==a.inArray(b,f)&&a(':input[name="'+b+'"]').closest("tr").hide()}):(a(':input[name="currency_pos"]').closest("tr").show(),a(':input[name="thousand_sep"]').closest("tr").show(),a(':input[name="decimal_sep"]').closest("tr").show(),a(':input[name="num_decimals"]').closest("tr").show())}).change(),a('input[name="woocommerce_calc_shipping"]').change(function(){a(this).is(":checked")?(a(':input[name="shipping_cost_domestic"]').closest("tr").show(),a(':input[name="shipping_cost_international"]').closest("tr").show()):(a(':input[name="shipping_cost_domestic"]').closest("tr").hide(),a(':input[name="shipping_cost_international"]').closest("tr").hide())}).change(),a('input[name="woocommerce_calc_taxes"]').change(function(){a(this).is(":checked")?(a(':input[name="woocommerce_prices_include_tax"], :input[name="woocommerce_import_tax_rates"]').closest("tr").show(),a("tr.tax-rates").show()):(a(':input[name="woocommerce_prices_include_tax"], :input[name="woocommerce_import_tax_rates"]').closest("tr").hide(),a("tr.tax-rates").hide())}).change(),a('input[name="woocommerce_import_tax_rates"]').change(function(){a(this).is(":checked")?a(".importing-tax-rates").show():a(".importing-tax-rates").hide()}).change(),a(".button-next").on("click",function(){return a(".wc-setup-content").block({message:null,overlayCSS:{background:"#fff",opacity:.6}}),!0})});

View File

@ -89,11 +89,6 @@ jQuery( function( $ ) {
}
} else if ( locale['default'][ key ] ) {
if ( locale['default'][ key ].required === true ) {
if ( field.find( 'label abbr' ).size() === 0 ) {
field_is_required( field, true );
}
}
if ( 'state' !== key ) {
if ( typeof locale['default'][ key ].hidden === 'undefined' || locale['default'][ key ].hidden === false ) {
@ -103,7 +98,7 @@ jQuery( function( $ ) {
}
}
if ( 'postcode' === key ) {
if ( 'postcode' === key || 'city' === key ) {
if ( locale['default'][ key ].label ) {
field.find( 'label' ).html( locale['default'][ key ].label );
}
@ -112,6 +107,12 @@ jQuery( function( $ ) {
field.find( 'input' ).attr( 'placeholder', locale['default'][ key ].placeholder );
}
}
if ( locale['default'][ key ].required === true ) {
if ( field.find( 'label abbr' ).size() === 0 ) {
field_is_required( field, true );
}
}
}
});

View File

@ -1 +1 @@
jQuery(function(a){function b(a,b){b?(a.find("label").append(' <abbr class="required" title="'+wc_address_i18n_params.i18n_required_text+'">*</abbr>'),a.addClass("validate-required")):(a.find("label abbr").remove(),a.removeClass("validate-required"))}if("undefined"==typeof wc_address_i18n_params)return!1;var c=wc_address_i18n_params.locale.replace(/&quot;/g,'"'),d=a.parseJSON(c);a(document.body).bind("country_to_state_changing",function(c,e,f){var g,h=f;g="undefined"!=typeof d[e]?d[e]:d["default"];var i=h.find("#billing_postcode_field, #shipping_postcode_field"),j=h.find("#billing_city_field, #shipping_city_field"),k=h.find("#billing_state_field, #shipping_state_field");i.attr("data-o_class")||(i.attr("data-o_class",i.attr("class")),j.attr("data-o_class",j.attr("class")),k.attr("data-o_class",k.attr("class"))),g.postcode_before_city?(i.add(j).add(k).removeClass("form-row-first form-row-last").addClass("form-row-first"),j.removeClass("form-row-wide form-row-first").addClass("form-row-last"),i.insertBefore(j)):(i.attr("class",i.attr("data-o_class")),j.attr("class",j.attr("data-o_class")),k.attr("class",k.attr("data-o_class")),i.insertAfter(k));var l=a.parseJSON(wc_address_i18n_params.locale_fields);a.each(l,function(a,c){var e=h.find(c);g[a]?(g[a].label&&e.find("label").html(g[a].label),g[a].placeholder&&e.find("input").attr("placeholder",g[a].placeholder),b(e,!1),"undefined"==typeof g[a].required&&d["default"][a].required===!0?b(e,!0):g[a].required===!0&&b(e,!0),"state"!==a&&(g[a].hidden===!0?e.hide().find("input").val(""):e.show())):d["default"][a]&&(d["default"][a].required===!0&&0===e.find("label abbr").size()&&b(e,!0),"state"!==a&&("undefined"==typeof d["default"][a].hidden||d["default"][a].hidden===!1?e.show():d["default"][a].hidden===!0&&e.hide().find("input").val("")),"postcode"===a&&(d["default"][a].label&&e.find("label").html(d["default"][a].label),d["default"][a].placeholder&&e.find("input").attr("placeholder",d["default"][a].placeholder)))})})});
jQuery(function(a){function b(a,b){b?(a.find("label").append(' <abbr class="required" title="'+wc_address_i18n_params.i18n_required_text+'">*</abbr>'),a.addClass("validate-required")):(a.find("label abbr").remove(),a.removeClass("validate-required"))}if("undefined"==typeof wc_address_i18n_params)return!1;var c=wc_address_i18n_params.locale.replace(/&quot;/g,'"'),d=a.parseJSON(c);a(document.body).bind("country_to_state_changing",function(c,e,f){var g,h=f;g="undefined"!=typeof d[e]?d[e]:d["default"];var i=h.find("#billing_postcode_field, #shipping_postcode_field"),j=h.find("#billing_city_field, #shipping_city_field"),k=h.find("#billing_state_field, #shipping_state_field");i.attr("data-o_class")||(i.attr("data-o_class",i.attr("class")),j.attr("data-o_class",j.attr("class")),k.attr("data-o_class",k.attr("class"))),g.postcode_before_city?(i.add(j).add(k).removeClass("form-row-first form-row-last").addClass("form-row-first"),j.removeClass("form-row-wide form-row-first").addClass("form-row-last"),i.insertBefore(j)):(i.attr("class",i.attr("data-o_class")),j.attr("class",j.attr("data-o_class")),k.attr("class",k.attr("data-o_class")),i.insertAfter(k));var l=a.parseJSON(wc_address_i18n_params.locale_fields);a.each(l,function(a,c){var e=h.find(c);g[a]?(g[a].label&&e.find("label").html(g[a].label),g[a].placeholder&&e.find("input").attr("placeholder",g[a].placeholder),b(e,!1),"undefined"==typeof g[a].required&&d["default"][a].required===!0?b(e,!0):g[a].required===!0&&b(e,!0),"state"!==a&&(g[a].hidden===!0?e.hide().find("input").val(""):e.show())):d["default"][a]&&("state"!==a&&("undefined"==typeof d["default"][a].hidden||d["default"][a].hidden===!1?e.show():d["default"][a].hidden===!0&&e.hide().find("input").val("")),("postcode"===a||"city"===a)&&(d["default"][a].label&&e.find("label").html(d["default"][a].label),d["default"][a].placeholder&&e.find("input").attr("placeholder",d["default"][a].placeholder)),d["default"][a].required===!0&&0===e.find("label abbr").size()&&b(e,!0))})})});

View File

@ -15,7 +15,6 @@ jQuery( function( $ ) {
$order_review: $( '#order_review' ),
$checkout_form: $( 'form.checkout' ),
init: function() {
$( document.body ).bind( 'update_checkout', this.reset_update_checkout_timer );
$( document.body ).bind( 'update_checkout', this.update_checkout );
$( document.body ).bind( 'init_checkout', this.init_checkout );
@ -26,13 +25,13 @@ jQuery( function( $ ) {
this.$checkout_form.on( 'submit', this.submit );
// Inline validation
this.$checkout_form.on( 'blur input change', '.input-text, select', this.validate_field );
this.$checkout_form.on( 'blur change', '.input-text, select', this.validate_field );
// Inputs/selects which update totals
this.$checkout_form.on( 'input change', 'select.shipping_method, input[name^=shipping_method], #ship-to-different-address input, .update_totals_on_change select, .update_totals_on_change input[type=radio]', this.trigger_update_checkout );
this.$checkout_form.on( 'change', 'select.shipping_method, input[name^=shipping_method], #ship-to-different-address input, .update_totals_on_change select, .update_totals_on_change input[type=radio]', this.trigger_update_checkout );
this.$checkout_form.on( 'change', '.address-field select', this.input_changed );
this.$checkout_form.on( 'change', '.address-field input.input-text, .update_totals_on_change input.input-text', this.maybe_input_changed );
this.$checkout_form.on( 'input change', '.address-field select', this.input_changed );
this.$checkout_form.on( 'input keydown', '.address-field input.input-text, .update_totals_on_change input.input-text', this.queue_update_checkout );
this.$checkout_form.on( 'keydown', '.address-field input.input-text, .update_totals_on_change input.input-text', this.queue_update_checkout );
// Address fields
this.$checkout_form.on( 'change', '#ship-to-different-address input', this.ship_to_different_address );
@ -182,7 +181,7 @@ jQuery( function( $ ) {
shipping_methods[ $( this ).data( 'index' ) ] = $( this ).val();
} );
var payment_method = $( '#order_review input[name=payment_method]:checked' ).val(),
var payment_method = $( '#order_review' ).find( 'input[name=payment_method]:checked' ).val(),
country = $( '#billing_country' ).val(),
state = $( '#billing_state' ).val(),
postcode = $( 'input#billing_postcode' ).val(),
@ -196,7 +195,7 @@ jQuery( function( $ ) {
s_address,
s_address_2;
if ( $( '#ship-to-different-address input' ).is( ':checked' ) ) {
if ( $( '#ship-to-different-address' ).find( 'input' ).is( ':checked' ) ) {
s_country = $( '#shipping_country' ).val();
s_state = $( '#shipping_state' ).val();
s_postcode = $( 'input#shipping_postcode' ).val();
@ -302,7 +301,7 @@ jQuery( function( $ ) {
}
// Trigger a handler to let gateways manipulate the checkout if needed
if ( $form.triggerHandler( 'checkout_place_order' ) !== false && $form.triggerHandler( 'checkout_place_order_' + $( '#order_review input[name=payment_method]:checked' ).val() ) !== false ) {
if ( $form.triggerHandler( 'checkout_place_order' ) !== false && $form.triggerHandler( 'checkout_place_order_' + $( '#order_review' ).find( 'input[name=payment_method]:checked' ).val() ) !== false ) {
$form.addClass( 'processing' );

File diff suppressed because one or more lines are too long

View File

@ -40,13 +40,34 @@ jQuery( function( $ ) {
}
};
if ( '1' !== wc_geolocation_params.is_checkout ) {
if ( '1' !== wc_geolocation_params.is_checkout && '1' !== wc_geolocation_params.is_cart && '1' !== wc_geolocation_params.is_account_page ) {
$.ajax( $geolocate_customer );
// Support form elements
$( 'form' ).each( function() {
var $this = $( this );
var method = $this.attr( 'method' );
if ( method && 'get' === method.toLowerCase() ) {
$this.append( '<input type="hidden" name="v" value="' + wc_geolocation_params.hash + '" />' );
} else {
var href = $this.attr( 'action' );
if ( href ) {
if ( href.indexOf( '?' ) > 0 ) {
$this.attr( 'action', href + '&v=' + wc_geolocation_params.hash );
} else {
$this.attr( 'action', href + '?v=' + wc_geolocation_params.hash );
}
}
}
});
// Append hashes on load
$append_hashes();
}
$( document.body ).on( 'added_to_cart', function() {
$append_hashes();
});
$append_hashes();
});

View File

@ -1 +1 @@
jQuery(function(a){var b=window.location.toString(),c=function(){wc_geolocation_params.hash&&a('a[href^="'+wc_geolocation_params.home_url+'"]:not(a[href*="v="]), a[href^="/"]:not(a[href*="v="])').each(function(){var b=a(this),c=b.attr("href");c.indexOf("?")>0?b.attr("href",c+"&v="+wc_geolocation_params.hash):b.attr("href",c+"?v="+wc_geolocation_params.hash)})},d=function(a){b=b.indexOf("?v=")>0||b.indexOf("&v=")>0?b.replace(/v=[^&]+/,"v="+a):b.indexOf("?")>0?b+"&v="+a:b+"?v="+a,window.location=b},e={url:wc_geolocation_params.wc_ajax_url.toString().replace("%%endpoint%%","get_customer_location"),type:"GET",success:function(a){a.success&&a.data.hash&&a.data.hash!==wc_geolocation_params.hash&&d(a.data.hash)}};"1"!==wc_geolocation_params.is_checkout&&a.ajax(e),a(document.body).on("added_to_cart",function(){c()}),c()});
jQuery(function(a){var b=window.location.toString(),c=function(){wc_geolocation_params.hash&&a('a[href^="'+wc_geolocation_params.home_url+'"]:not(a[href*="v="]), a[href^="/"]:not(a[href*="v="])').each(function(){var b=a(this),c=b.attr("href");c.indexOf("?")>0?b.attr("href",c+"&v="+wc_geolocation_params.hash):b.attr("href",c+"?v="+wc_geolocation_params.hash)})},d=function(a){b=b.indexOf("?v=")>0||b.indexOf("&v=")>0?b.replace(/v=[^&]+/,"v="+a):b.indexOf("?")>0?b+"&v="+a:b+"?v="+a,window.location=b},e={url:wc_geolocation_params.wc_ajax_url.toString().replace("%%endpoint%%","get_customer_location"),type:"GET",success:function(a){a.success&&a.data.hash&&a.data.hash!==wc_geolocation_params.hash&&d(a.data.hash)}};"1"!==wc_geolocation_params.is_checkout&&"1"!==wc_geolocation_params.is_cart&&"1"!==wc_geolocation_params.is_account_page&&(a.ajax(e),a("form").each(function(){var b=a(this),c=b.attr("method");if(c&&"get"===c.toLowerCase())b.append('<input type="hidden" name="v" value="'+wc_geolocation_params.hash+'" />');else{var d=b.attr("action");d&&(d.indexOf("?")>0?b.attr("action",d+"&v="+wc_geolocation_params.hash):b.attr("action",d+"?v="+wc_geolocation_params.hash))}}),c()),a(document.body).on("added_to_cart",function(){c()})});

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -2,9 +2,9 @@
# This file is distributed under the same license as the WooCommerce package.
msgid ""
msgstr ""
"Project-Id-Version: WooCommerce 2.4.3 Frontend\n"
"Project-Id-Version: WooCommerce 2.4.6 Frontend\n"
"Report-Msgid-Bugs-To: https://github.com/woothemes/woocommerce/issues\n"
"POT-Creation-Date: 2015-08-12 18:49:49+00:00\n"
"POT-Creation-Date: 2015-08-24 16:25:50+00:00\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
@ -989,6 +989,10 @@ msgstr ""
msgid "Zimbabwe"
msgstr ""
#: i18n/locale-info.php:351
msgid "Consumption tax"
msgstr ""
#: i18n/states/AR.php:13
msgid "Ciudad Aut&oacute;noma de Buenos Aires"
msgstr ""
@ -5082,7 +5086,7 @@ msgstr ""
#: includes/abstracts/abstract-wc-integration.php:29
#: includes/abstracts/abstract-wc-settings-api.php:77
#: includes/class-wc-install.php:688 includes/emails/class-wc-email.php:711
#: includes/class-wc-install.php:692 includes/emails/class-wc-email.php:711
msgid "Settings"
msgstr ""
@ -5098,8 +5102,8 @@ msgstr ""
#: includes/abstracts/abstract-wc-order.php:1762
#: includes/abstracts/abstract-wc-product.php:964
#: includes/abstracts/abstract-wc-product.php:970
#: includes/class-wc-cart.php:1538 includes/class-wc-product-variable.php:331
#: includes/class-wc-product-variation.php:306
#: includes/class-wc-cart.php:1538 includes/class-wc-product-variable.php:335
#: includes/class-wc-product-variation.php:307
msgid "Free!"
msgstr ""
@ -5120,35 +5124,41 @@ msgid "Fee"
msgstr ""
#: includes/abstracts/abstract-wc-order.php:1892
#: includes/shortcodes/class-wc-shortcode-checkout.php:141
#: includes/shortcodes/class-wc-shortcode-checkout.php:143
#: templates/checkout/thankyou.php:53
msgid "Payment Method:"
msgstr ""
#: includes/abstracts/abstract-wc-order.php:1898
#: includes/shortcodes/class-wc-shortcode-checkout.php:136
#: includes/shortcodes/class-wc-shortcode-checkout.php:138
#: templates/checkout/thankyou.php:48
msgid "Total:"
msgstr ""
#: includes/abstracts/abstract-wc-order.php:2134
msgid "Download file%s"
#: includes/abstracts/abstract-wc-order.php:2135
#: templates/emails/plain/email-order-items.php:49
msgid "Download %d"
msgstr ""
#: includes/abstracts/abstract-wc-order.php:2135
#: templates/emails/plain/email-order-items.php:51
msgid "Download"
msgstr ""
#. Plugin Name of the plugin/theme
msgid "WooCommerce"
msgstr ""
#: includes/abstracts/abstract-wc-order.php:2219
#: includes/abstracts/abstract-wc-order.php:2222
msgid "Order status changed from %s to %s."
msgstr ""
#: includes/abstracts/abstract-wc-order.php:2477
#: includes/abstracts/abstract-wc-order.php:2480
msgid "Item #%s variation #%s stock reduced from %s to %s."
msgstr ""
#: includes/abstracts/abstract-wc-order.php:2479
#: includes/class-wc-ajax.php:1372
#: includes/abstracts/abstract-wc-order.php:2482
#: includes/class-wc-ajax.php:1415
msgid "Item #%s stock reduced from %s to %s."
msgstr ""
@ -5175,7 +5185,7 @@ msgstr ""
#: includes/abstracts/abstract-wc-product.php:537
#: includes/class-wc-product-simple.php:47
#: includes/class-wc-product-variation.php:186
#: includes/class-wc-product-variation.php:187
msgid "Add to cart"
msgstr ""
@ -5186,40 +5196,40 @@ msgstr ""
#: includes/abstracts/abstract-wc-product.php:626
#: includes/abstracts/abstract-wc-product.php:637
#: includes/abstracts/abstract-wc-product.php:659
#: includes/class-wc-ajax.php:780 includes/class-wc-ajax.php:2447
#: includes/class-wc-product-variation.php:527
#: includes/class-wc-product-variation.php:537
#: includes/class-wc-product-variation.php:553
#: includes/class-wc-ajax.php:829 includes/class-wc-ajax.php:2492
#: includes/class-wc-product-variation.php:526
#: includes/class-wc-product-variation.php:536
#: includes/class-wc-product-variation.php:552
msgid "In stock"
msgstr ""
#: includes/abstracts/abstract-wc-product.php:631
#: includes/class-wc-product-variation.php:531
#: includes/class-wc-product-variation.php:530
msgid "Only %s left in stock"
msgstr ""
#: includes/abstracts/abstract-wc-product.php:634
#: includes/abstracts/abstract-wc-product.php:645
#: includes/class-wc-product-variation.php:534
#: includes/class-wc-product-variation.php:544
#: includes/class-wc-product-variation.php:533
#: includes/class-wc-product-variation.php:543
msgid "(can be backordered)"
msgstr ""
#: includes/abstracts/abstract-wc-product.php:642
#: includes/class-wc-product-variation.php:541
#: includes/class-wc-product-variation.php:540
msgid "%s in stock"
msgstr ""
#: includes/abstracts/abstract-wc-product.php:654
#: includes/class-wc-product-variation.php:550 templates/cart/cart.php:82
#: includes/class-wc-product-variation.php:549 templates/cart/cart.php:82
msgid "Available on backorder"
msgstr ""
#: includes/abstracts/abstract-wc-product.php:664
#: includes/abstracts/abstract-wc-product.php:670
#: includes/class-wc-ajax.php:781 includes/class-wc-ajax.php:2448
#: includes/class-wc-product-variation.php:556
#: includes/class-wc-product-variation.php:560
#: includes/class-wc-ajax.php:830 includes/class-wc-ajax.php:2493
#: includes/class-wc-product-variation.php:555
#: includes/class-wc-product-variation.php:559
msgid "Out of stock"
msgstr ""
@ -6047,108 +6057,108 @@ msgstr ""
msgid "Invalid product SKU"
msgstr ""
#: includes/class-wc-ajax.php:193
#: includes/class-wc-ajax.php:201
msgid "Sorry there was a problem removing this coupon."
msgstr ""
#: includes/class-wc-ajax.php:199
#: includes/class-wc-ajax.php:207
msgid "Coupon has been removed."
msgstr ""
#: includes/class-wc-ajax.php:250
#: includes/class-wc-ajax.php:258
msgid "Sorry, your session has expired."
msgstr ""
#: includes/class-wc-ajax.php:250
#: includes/class-wc-ajax.php:258
msgid "Return to homepage"
msgstr ""
#: includes/class-wc-ajax.php:765 includes/class-wc-ajax.php:2430
#: includes/class-wc-ajax.php:812 includes/class-wc-ajax.php:2475
#: includes/gateways/simplify-commerce/class-wc-gateway-simplify-commerce.php:210
msgid "Standard"
msgstr ""
#: includes/class-wc-ajax.php:774 includes/class-wc-ajax.php:2440
#: includes/class-wc-ajax.php:822 includes/class-wc-ajax.php:2485
msgid "Do not allow"
msgstr ""
#: includes/class-wc-ajax.php:775 includes/class-wc-ajax.php:2441
#: includes/class-wc-ajax.php:823 includes/class-wc-ajax.php:2486
msgid "Allow, but notify customer"
msgstr ""
#: includes/class-wc-ajax.php:776 includes/class-wc-ajax.php:2442
#: includes/class-wc-ajax.php:824 includes/class-wc-ajax.php:2487
msgid "Allow"
msgstr ""
#: includes/class-wc-ajax.php:1073
#: includes/class-wc-ajax.php:1116
msgid "File %d"
msgstr ""
#: includes/class-wc-ajax.php:1383
#: includes/class-wc-ajax.php:1426
msgid ""
"No products had their stock reduced - they may not have stock management "
"enabled."
msgstr ""
#: includes/class-wc-ajax.php:1424 includes/class-wc-ajax.php:2235
#: includes/class-wc-ajax.php:1467 includes/class-wc-ajax.php:2278
msgid "Item #%s stock increased from %s to %s."
msgstr ""
#: includes/class-wc-ajax.php:1434
#: includes/class-wc-ajax.php:1477
msgid ""
"No products had their stock increased - they may not have stock management "
"enabled."
msgstr ""
#: includes/class-wc-ajax.php:1453
#: includes/class-wc-ajax.php:1496
#: includes/widgets/class-wc-widget-product-categories.php:52
#: templates/single-product-reviews.php:65
msgid "Name"
msgstr ""
#: includes/class-wc-ajax.php:1453
#: includes/class-wc-ajax.php:1496
msgid "Value"
msgstr ""
#: includes/class-wc-ajax.php:1703
#: includes/class-wc-ajax.php:1746
msgid "Delete note"
msgstr ""
#: includes/class-wc-ajax.php:2175
#: includes/class-wc-ajax.php:2218
msgid "Invalid refund amount"
msgstr ""
#: includes/class-wc-ajax.php:2220
#: includes/class-wc-ajax.php:2263
msgid "Refund failed"
msgstr ""
#: includes/class-wc-ajax.php:2317
#: includes/class-wc-ajax.php:2360
msgid "Description is missing."
msgstr ""
#: includes/class-wc-ajax.php:2320
#: includes/class-wc-ajax.php:2363
msgid "User is missing."
msgstr ""
#: includes/class-wc-ajax.php:2323
#: includes/class-wc-ajax.php:2366
msgid "Permissions is missing."
msgstr ""
#: includes/class-wc-ajax.php:2352
#: includes/class-wc-ajax.php:2395
msgid "API Key updated successfully."
msgstr ""
#: includes/class-wc-ajax.php:2383
#: includes/class-wc-ajax.php:2426
msgid ""
"API Key generated successfully. Make sure to copy your new API keys now. "
"You won't be able to see it again!"
msgstr ""
#: includes/class-wc-ajax.php:2384
#: includes/class-wc-ajax.php:2427
msgid "Revoke Key"
msgstr ""
#: includes/class-wc-ajax.php:2599
#: includes/class-wc-ajax.php:2643
msgid "Dismiss this notice."
msgstr ""
@ -6258,27 +6268,27 @@ msgstr ""
msgid "Access Denied"
msgstr ""
#: includes/class-wc-breadcrumb.php:118
#: includes/class-wc-breadcrumb.php:119
msgid "Error 404"
msgstr ""
#: includes/class-wc-breadcrumb.php:210
#: includes/class-wc-breadcrumb.php:211
msgid "Products tagged &ldquo;%s&rdquo;"
msgstr ""
#: includes/class-wc-breadcrumb.php:261
#: includes/class-wc-breadcrumb.php:262
msgid "Posts tagged &ldquo;%s&rdquo;"
msgstr ""
#: includes/class-wc-breadcrumb.php:286
#: includes/class-wc-breadcrumb.php:304
msgid "Author: %s"
msgstr ""
#: includes/class-wc-breadcrumb.php:321
#: includes/class-wc-breadcrumb.php:339
msgid "Search results for &ldquo;%s&rdquo;"
msgstr ""
#: includes/class-wc-breadcrumb.php:330
#: includes/class-wc-breadcrumb.php:348
msgid "Page %d"
msgstr ""
@ -6650,7 +6660,7 @@ msgstr ""
#: includes/class-wc-download-handler.php:98
#: includes/class-wc-form-handler.php:558
#: includes/shortcodes/class-wc-shortcode-checkout.php:163
#: includes/shortcodes/class-wc-shortcode-checkout.php:165
#: includes/shortcodes/class-wc-shortcode-my-account.php:108
msgid "Invalid order."
msgstr ""
@ -6821,61 +6831,57 @@ msgid ""
"assistance."
msgstr ""
#: includes/class-wc-form-handler.php:588
msgid "Sorry, this product is unavailable."
#: includes/class-wc-form-handler.php:666
msgid "Please choose the quantity of items you wish to add to your cart&hellip;"
msgstr ""
#: includes/class-wc-form-handler.php:635
#: includes/class-wc-form-handler.php:674
msgid "Please choose a product to add to your cart&hellip;"
msgstr ""
#: includes/class-wc-form-handler.php:727
msgid "%s is a required field"
msgid_plural "%s are required fields"
msgstr[0] ""
msgstr[1] ""
#: includes/class-wc-form-handler.php:638
#: includes/class-wc-form-handler.php:729
msgid "Please choose product options&hellip;"
msgstr ""
#: includes/class-wc-form-handler.php:683
msgid "Please choose the quantity of items you wish to add to your cart&hellip;"
msgstr ""
#: includes/class-wc-form-handler.php:690
msgid "Please choose a product to add to your cart&hellip;"
msgstr ""
#: includes/class-wc-form-handler.php:754
#: includes/class-wc-form-handler.php:758
#: includes/class-wc-form-handler.php:762
#: includes/class-wc-form-handler.php:771
#: includes/class-wc-form-handler.php:902
#: includes/class-wc-form-handler.php:755
#: includes/class-wc-form-handler.php:759
#: includes/class-wc-form-handler.php:763
#: includes/class-wc-form-handler.php:772
#: includes/class-wc-form-handler.php:903
msgid "Error"
msgstr ""
#: includes/class-wc-form-handler.php:758
#: includes/class-wc-form-handler.php:759
msgid "Username is required."
msgstr ""
#: includes/class-wc-form-handler.php:762
#: includes/class-wc-form-handler.php:763
msgid "Password is required."
msgstr ""
#: includes/class-wc-form-handler.php:771
#: includes/class-wc-form-handler.php:772
msgid "A user could not be found with this email address."
msgstr ""
#: includes/class-wc-form-handler.php:798
#: includes/class-wc-form-handler.php:799
msgid "You are now logged in as <strong>%s</strong>"
msgstr ""
#: includes/class-wc-form-handler.php:842
#: includes/class-wc-form-handler.php:843
msgid "Please enter your password."
msgstr ""
#: includes/class-wc-form-handler.php:846
#: includes/class-wc-form-handler.php:847
msgid "Passwords do not match."
msgstr ""
#: includes/class-wc-form-handler.php:885
#: includes/class-wc-form-handler.php:886
msgid "Anti-spam field was filled in."
msgstr ""
@ -6914,34 +6920,58 @@ msgstr ""
msgid "Shop Manager"
msgstr ""
#: includes/class-wc-install.php:688
#: includes/class-wc-install.php:692
msgid "View WooCommerce Settings"
msgstr ""
#: includes/class-wc-install.php:704
#: includes/class-wc-install.php:708
msgid "View WooCommerce Documentation"
msgstr ""
#: includes/class-wc-install.php:704
#: includes/class-wc-install.php:708
msgid "Docs"
msgstr ""
#: includes/class-wc-install.php:705
#: includes/class-wc-install.php:709
msgid "View WooCommerce API Docs"
msgstr ""
#: includes/class-wc-install.php:705
#: includes/class-wc-install.php:709
msgid "API Docs"
msgstr ""
#: includes/class-wc-install.php:706
#: includes/class-wc-install.php:710
msgid "Visit Premium Customer Support Forum"
msgstr ""
#: includes/class-wc-install.php:706
#: includes/class-wc-install.php:710
msgid "Premium Support"
msgstr ""
#: includes/class-wc-language-pack-upgrader.php:254
#: includes/class-wc-language-pack-upgrader.php:257
#: includes/class-wc-language-pack-upgrader.php:260
msgid "Failed to install/update the translation:"
msgstr ""
#: includes/class-wc-language-pack-upgrader.php:254
msgid "Seems you don't have permission to do this!"
msgstr ""
#: includes/class-wc-language-pack-upgrader.php:257
msgid ""
"An authentication error occurred while updating the translation. Please try "
"again or configure your %sUpgrade Constants%s."
msgstr ""
#: includes/class-wc-language-pack-upgrader.php:260
msgid "Sorry but there is no translation available for your language =/"
msgstr ""
#: includes/class-wc-language-pack-upgrader.php:267
msgid "Translations installed/updated successfully!"
msgstr ""
#: includes/class-wc-order.php:40 includes/wc-cart-functions.php:246
msgid "(Includes %s)"
msgstr ""
@ -7398,7 +7428,7 @@ msgid "Buy product"
msgstr ""
#: includes/class-wc-product-simple.php:47
#: includes/class-wc-product-variation.php:186
#: includes/class-wc-product-variation.php:187
msgid "Read More"
msgstr ""
@ -7406,13 +7436,13 @@ msgstr ""
msgid "Select options"
msgstr ""
#: includes/class-wc-product-variable.php:678
#: includes/class-wc-product-variable.php:693
msgid ""
"This variable product has no active variations so cannot be published. "
"Changing status to draft."
msgstr ""
#: includes/class-wc-product-variation.php:659
#: includes/class-wc-product-variation.php:658
msgid "%s &ndash; %s%s"
msgstr ""
@ -7469,7 +7499,7 @@ msgstr ""
#: includes/emails/class-wc-email-cancelled-order.php:110
#: includes/emails/class-wc-email-customer-completed-order.php:138
#: includes/emails/class-wc-email-customer-refunded-order.php:171
#: includes/emails/class-wc-email-customer-refunded-order.php:174
#: includes/emails/class-wc-email-new-order.php:117
#: includes/emails/class-wc-email.php:475
#: includes/gateways/bacs/class-wc-gateway-bacs.php:74
@ -7483,7 +7513,7 @@ msgstr ""
#: includes/emails/class-wc-email-cancelled-order.php:112
#: includes/emails/class-wc-email-customer-completed-order.php:140
#: includes/emails/class-wc-email-customer-refunded-order.php:173
#: includes/emails/class-wc-email-customer-refunded-order.php:176
#: includes/emails/class-wc-email-new-order.php:119
#: includes/emails/class-wc-email.php:477
msgid "Enable this email notification"
@ -7531,7 +7561,7 @@ msgstr ""
#: includes/emails/class-wc-email-cancelled-order.php:137
#: includes/emails/class-wc-email-customer-completed-order.php:172
#: includes/emails/class-wc-email-customer-refunded-order.php:205
#: includes/emails/class-wc-email-customer-refunded-order.php:208
#: includes/emails/class-wc-email-new-order.php:144
#: includes/emails/class-wc-email.php:495
msgid "Email type"
@ -7540,7 +7570,7 @@ msgstr ""
#: includes/emails/class-wc-email-cancelled-order.php:139
#: includes/emails/class-wc-email-customer-completed-order.php:174
#: includes/emails/class-wc-email-customer-invoice.php:175
#: includes/emails/class-wc-email-customer-refunded-order.php:207
#: includes/emails/class-wc-email-customer-refunded-order.php:210
#: includes/emails/class-wc-email-new-order.php:146
#: includes/emails/class-wc-email.php:497
msgid "Choose which format of email to send."
@ -7580,10 +7610,10 @@ msgstr ""
#: includes/emails/class-wc-email-customer-invoice.php:154
#: includes/emails/class-wc-email-customer-invoice.php:161
#: includes/emails/class-wc-email-customer-invoice.php:168
#: includes/emails/class-wc-email-customer-refunded-order.php:179
#: includes/emails/class-wc-email-customer-refunded-order.php:186
#: includes/emails/class-wc-email-customer-refunded-order.php:193
#: includes/emails/class-wc-email-customer-refunded-order.php:200
#: includes/emails/class-wc-email-customer-refunded-order.php:182
#: includes/emails/class-wc-email-customer-refunded-order.php:189
#: includes/emails/class-wc-email-customer-refunded-order.php:196
#: includes/emails/class-wc-email-customer-refunded-order.php:203
#: includes/emails/class-wc-email.php:483
#: includes/emails/class-wc-email.php:490
msgid "Defaults to <code>%s</code>"
@ -7640,21 +7670,21 @@ msgstr ""
msgid "Email Type"
msgstr ""
#: includes/emails/class-wc-email-customer-new-account.php:32
#: includes/emails/class-wc-email-customer-new-account.php:33
msgid "New account"
msgstr ""
#: includes/emails/class-wc-email-customer-new-account.php:33
#: includes/emails/class-wc-email-customer-new-account.php:34
msgid ""
"Customer \"new account\" emails are sent to the customer when a customer "
"signs up via checkout or account pages."
msgstr ""
#: includes/emails/class-wc-email-customer-new-account.php:38
#: includes/emails/class-wc-email-customer-new-account.php:39
msgid "Your account on {site_title}"
msgstr ""
#: includes/emails/class-wc-email-customer-new-account.php:39
#: includes/emails/class-wc-email-customer-new-account.php:40
msgid "Welcome to {site_title}"
msgstr ""
@ -7692,55 +7722,55 @@ msgstr ""
msgid "Your {site_title} order receipt from {order_date}"
msgstr ""
#: includes/emails/class-wc-email-customer-refunded-order.php:37
#: includes/emails/class-wc-email-customer-refunded-order.php:40
msgid "Your {site_title} order from {order_date} has been partially refunded"
msgstr ""
#: includes/emails/class-wc-email-customer-refunded-order.php:38
#: includes/emails/class-wc-email-customer-refunded-order.php:41
msgid "Your {site_title} order from {order_date} has been refunded"
msgstr ""
#: includes/emails/class-wc-email-customer-refunded-order.php:40
#: includes/emails/class-wc-email-customer-refunded-order.php:43
msgid "Your order has been fully refunded"
msgstr ""
#: includes/emails/class-wc-email-customer-refunded-order.php:41
#: includes/emails/class-wc-email-customer-refunded-order.php:44
msgid "Your order has been partially refunded"
msgstr ""
#: includes/emails/class-wc-email-customer-refunded-order.php:45
#: includes/emails/class-wc-email-customer-refunded-order.php:48
msgid "Partially Refunded order"
msgstr ""
#: includes/emails/class-wc-email-customer-refunded-order.php:46
#: includes/emails/class-wc-email-customer-refunded-order.php:49
msgid ""
"Order partially refunded emails are sent to customers when their orders are "
"partially refunded."
msgstr ""
#: includes/emails/class-wc-email-customer-refunded-order.php:54
#: includes/emails/class-wc-email-customer-refunded-order.php:57
msgid "Refunded order"
msgstr ""
#: includes/emails/class-wc-email-customer-refunded-order.php:55
#: includes/emails/class-wc-email-customer-refunded-order.php:58
msgid ""
"Order refunded emails are sent to customers when their orders are marked "
"refunded."
msgstr ""
#: includes/emails/class-wc-email-customer-refunded-order.php:177
#: includes/emails/class-wc-email-customer-refunded-order.php:180
msgid "Full Refund Subject"
msgstr ""
#: includes/emails/class-wc-email-customer-refunded-order.php:184
#: includes/emails/class-wc-email-customer-refunded-order.php:187
msgid "Partial Refund Subject"
msgstr ""
#: includes/emails/class-wc-email-customer-refunded-order.php:191
#: includes/emails/class-wc-email-customer-refunded-order.php:194
msgid "Full Refund Email Heading"
msgstr ""
#: includes/emails/class-wc-email-customer-refunded-order.php:198
#: includes/emails/class-wc-email-customer-refunded-order.php:201
msgid "Partial Refund Email Heading"
msgstr ""
@ -8092,7 +8122,7 @@ msgstr ""
msgid "Accept COD if the order is virtual"
msgstr ""
#: includes/gateways/cod/class-wc-gateway-cod.php:206
#: includes/gateways/cod/class-wc-gateway-cod.php:203
msgid "Payment to be made upon delivery."
msgstr ""
@ -8640,14 +8670,14 @@ msgid "Flat Rate Shipping lets you charge a fixed rate for shipping."
msgstr ""
#: includes/shipping/flat-rate/includes/settings-flat-rate.php:7
msgid "Enter a cost (excl. tax) or sum, e.g. <code>10 * [qty]</code>."
msgid "Enter a cost (excl. tax) or sum, e.g. <code>10.00 * [qty]</code>."
msgstr ""
#: includes/shipping/flat-rate/includes/settings-flat-rate.php:7
msgid ""
"Supports the following placeholders: <code>[qty]</code> = number of items, "
"<code>[cost]</code> = cost of items, <code>[fee percent=\"10\" "
"min=\"20\"]</code> = Percentage based fee."
"min_fee=\"20\"]</code> = Percentage based fee."
msgstr ""
#: includes/shipping/flat-rate/includes/settings-flat-rate.php:16
@ -8877,8 +8907,7 @@ msgid "Allowed Zip/Post Codes"
msgstr ""
#: includes/shipping/local-delivery/class-wc-shipping-local-delivery.php:125
#: includes/shipping/local-pickup/class-wc-shipping-local-pickup.php:81
msgid "What zip/post codes are available for local pickup?"
msgid "What zip/post codes are available for local delivery?"
msgstr ""
#: includes/shipping/local-delivery/class-wc-shipping-local-delivery.php:127
@ -8904,43 +8933,47 @@ msgstr ""
msgid "Enable local pickup"
msgstr ""
#: includes/shipping/local-pickup/class-wc-shipping-local-pickup.php:81
msgid "What zip/post codes are available for local pickup?"
msgstr ""
#: includes/shortcodes/class-wc-shortcode-cart.php:42
msgid "Shipping costs updated."
msgstr ""
#: includes/shortcodes/class-wc-shortcode-checkout.php:88
#: includes/shortcodes/class-wc-shortcode-checkout.php:90
msgid "Invalid order. If you have an account please log in and try again."
msgstr ""
#: includes/shortcodes/class-wc-shortcode-checkout.php:88
#: includes/shortcodes/class-wc-shortcode-checkout.php:90
#: includes/shortcodes/class-wc-shortcode-my-account.php:108
#: templates/checkout/thankyou.php:30
msgid "My Account"
msgstr ""
#: includes/shortcodes/class-wc-shortcode-checkout.php:107
#: includes/shortcodes/class-wc-shortcode-checkout.php:155
#: includes/shortcodes/class-wc-shortcode-checkout.php:109
#: includes/shortcodes/class-wc-shortcode-checkout.php:157
msgid ""
"This order&rsquo;s status is &ldquo;%s&rdquo;&mdash;it cannot be paid for. "
"Please contact us if you need assistance."
msgstr ""
#: includes/shortcodes/class-wc-shortcode-checkout.php:111
#: includes/shortcodes/class-wc-shortcode-checkout.php:159
#: includes/shortcodes/class-wc-shortcode-checkout.php:113
#: includes/shortcodes/class-wc-shortcode-checkout.php:161
msgid "Sorry, this order is invalid and cannot be paid for."
msgstr ""
#: includes/shortcodes/class-wc-shortcode-checkout.php:128
#: includes/shortcodes/class-wc-shortcode-checkout.php:130
#: templates/checkout/thankyou.php:40
msgid "Order Number:"
msgstr ""
#: includes/shortcodes/class-wc-shortcode-checkout.php:132
#: includes/shortcodes/class-wc-shortcode-checkout.php:134
#: templates/checkout/thankyou.php:44
msgid "Date:"
msgstr ""
#: includes/shortcodes/class-wc-shortcode-checkout.php:227
#: includes/shortcodes/class-wc-shortcode-checkout.php:231
msgid ""
"The order totals have been updated. Please confirm your order by pressing "
"the Place Order button at the bottom of the page."
@ -9282,19 +9315,19 @@ msgstr ""
msgid "Refund &ndash; %s"
msgstr ""
#: includes/wc-product-functions.php:510
#: includes/wc-product-functions.php:508
msgid "Simple product"
msgstr ""
#: includes/wc-product-functions.php:511
#: includes/wc-product-functions.php:509
msgid "Grouped product"
msgstr ""
#: includes/wc-product-functions.php:512
#: includes/wc-product-functions.php:510
msgid "External/Affiliate product"
msgstr ""
#: includes/wc-product-functions.php:513
#: includes/wc-product-functions.php:511
msgid "Variable product"
msgstr ""
@ -10128,16 +10161,6 @@ msgstr ""
msgid "Shipping address"
msgstr ""
#: templates/emails/email-order-items.php:54
#: templates/emails/plain/email-order-items.php:49
msgid "Download %d"
msgstr ""
#: templates/emails/email-order-items.php:56
#: templates/emails/plain/email-order-items.php:51
msgid "Download"
msgstr ""
#: templates/emails/plain/admin-cancelled-order.php:21
#: templates/emails/plain/admin-new-order.php:22
#: templates/emails/plain/customer-completed-order.php:22
@ -10862,8 +10885,8 @@ msgid "Failed"
msgstr ""
#: includes/class-wc-product-grouped.php:193
#: includes/class-wc-product-variable.php:322
#: includes/class-wc-product-variable.php:328
#: includes/class-wc-product-variable.php:326
#: includes/class-wc-product-variable.php:332
msgctxt "Price range: from-to"
msgid "%1$s&ndash;%2$s"
msgstr ""
@ -10875,7 +10898,7 @@ msgstr ""
#: includes/wc-cart-functions.php:100
msgctxt "Item name in quotes"
msgid "&ldquo;%s&ldquo;"
msgid "&ldquo;%s&rdquo;"
msgstr ""
#: includes/wc-core-functions.php:78 includes/wc-order-functions.php:629

View File

@ -20,6 +20,26 @@ return array(
)
)
),
'BD' => array(
'currency_code' => 'BDT',
'currency_pos' => 'left',
'thousand_sep' => ',',
'decimal_sep' => '.',
'num_decimals' => 2,
'weight_unit' => 'kg',
'dimension_unit' => 'in',
'tax_rates' => array(
'' => array(
array(
'country' => 'BD',
'state' => '',
'rate' => '15.0000',
'name' => 'VAT',
'shipping' => true
)
)
)
),
'BE' => array(
'currency_code' => 'EUR',
'currency_pos' => 'left',
@ -274,6 +294,26 @@ return array(
)
)
),
'HU' => array(
'currency_code' => 'HUF',
'currency_pos' => 'right_space',
'thousand_sep' => ' ',
'decimal_sep' => ',',
'num_decimals' => 0,
'weight_unit' => 'kg',
'dimension_unit' => 'cm',
'tax_rates' => array(
'' => array(
array(
'country' => 'HU',
'state' => '',
'rate' => '27.0000',
'name' => 'ÁFA',
'shipping' => true
)
)
)
),
'IT' => array(
'currency_code' => 'EUR',
'currency_pos' => 'right',
@ -294,6 +334,26 @@ return array(
)
)
),
'JP' => array(
'currency_code' => 'JPY',
'currency_pos' => 'left',
'thousand_sep' => ',',
'decimal_sep' => '.',
'num_decimals' => 0,
'weight_unit' => 'kg',
'dimension_unit' => 'cm',
'tax_rates' => array(
'' => array(
array(
'country' => 'JP',
'state' => '',
'rate' => '8.0000',
'name' => __( 'Consumption tax', 'woocommerce' ),
'shipping' => true
)
)
)
),
'NL' => array(
'currency_code' => 'EUR',
'currency_pos' => 'left',
@ -334,6 +394,26 @@ return array(
)
)
),
'NP' => array(
'currency_code' => 'NPR',
'currency_pos' => 'left_space',
'thousand_sep' => ',',
'decimal_sep' => '.',
'num_decimals' => 2,
'weight_unit' => 'kg',
'dimension_unit' => 'cm',
'tax_rates' => array(
'' => array(
array(
'country' => 'NP',
'state' => '',
'rate' => '13.0000',
'name' => 'VAT',
'shipping' => true
)
)
)
),
'PL' => array(
'currency_code' => 'PLN',
'currency_pos' => 'right',

View File

@ -1732,15 +1732,13 @@ abstract class WC_Abstract_Order {
if ( $this->order_shipping != 0 ) {
$tax_text = '';
if ( $tax_display == 'excl' ) {
// Show shipping excluding tax
$shipping = wc_price( $this->order_shipping, array('currency' => $this->get_order_currency()) );
if ( $this->order_shipping_tax != 0 && $this->prices_include_tax ) {
$tax_text = WC()->countries->ex_tax_or_vat() . ' ';
$shipping .= apply_filters( 'woocommerce_order_shipping_to_display_tax_label', '&nbsp;<small class="tax_label">' . WC()->countries->ex_tax_or_vat() . '</small>', $this, $tax_display );
}
} else {
@ -1749,12 +1747,12 @@ abstract class WC_Abstract_Order {
$shipping = wc_price( $this->order_shipping + $this->order_shipping_tax, array('currency' => $this->get_order_currency()) );
if ( $this->order_shipping_tax != 0 && ! $this->prices_include_tax ) {
$tax_text = WC()->countries->inc_tax_or_vat() . ' ';
$shipping .= apply_filters( 'woocommerce_order_shipping_to_display_tax_label', '&nbsp;<small class="tax_label">' . WC()->countries->inc_tax_or_vat() . '</small>', $this, $tax_display );
}
}
$shipping .= sprintf( __( '&nbsp;<small>%svia %s</small>', 'woocommerce' ), $tax_text, $this->get_shipping_method() );
$shipping .= apply_filters( 'woocommerce_order_shipping_to_display_shipped_via', '&nbsp;<small class="shipped_via">' . sprintf( __( 'via %s', 'woocommerce' ), $this->get_shipping_method() ) . '</small>', $this );
} elseif ( $this->get_shipping_method() ) {
$shipping = $this->get_shipping_method();
@ -1830,14 +1828,14 @@ abstract class WC_Abstract_Order {
if ( $this->get_total_discount() > 0 ) {
$total_rows['discount'] = array(
'label' => __( 'Discount:', 'woocommerce' ),
'value' => '-' . $this->get_discount_to_display()
'value' => '-' . $this->get_discount_to_display( $tax_display )
);
}
if ( $this->get_shipping_method() ) {
$total_rows['shipping'] = array(
'label' => __( 'Shipping:', 'woocommerce' ),
'value' => $this->get_shipping_to_display()
'value' => $this->get_shipping_to_display( $tax_display )
);
}
@ -2131,7 +2129,9 @@ abstract class WC_Abstract_Order {
$links = array();
foreach ( $download_files as $download_id => $file ) {
$links[] = '<small><a href="' . esc_url( $file['download_url'] ) . '">' . sprintf( __( 'Download file%s', 'woocommerce' ), ( count( $download_files ) > 1 ? ' ' . ( $i++ ) . ': ' : ': ' ) ) . esc_html( $file['name'] ) . '</a></small>';
$i++;
$prefix = count( $download_files ) > 1 ? sprintf( __( 'Download %d', 'woocommerce' ), $i ) : __( 'Download', 'woocommerce' );
$links[] = '<small class="download-url">' . $prefix . ': <a href="' . esc_url( $file['download_url'] ) . '" target="_blank">' . esc_html( $file['name'] ) . '</a></small>' . "\n";
}
echo '<br/>' . implode( '<br/>', $links );
@ -2199,8 +2199,9 @@ abstract class WC_Abstract_Order {
*
* @param string $new_status Status to change the order to. No internal wc- prefix is required.
* @param string $note (default: '') Optional note to add
* @param bool $manual is this a manual order status change?
*/
public function update_status( $new_status, $note = '' ) {
public function update_status( $new_status, $note = '', $manual = false ) {
if ( ! $this->id ) {
return;
}
@ -2216,7 +2217,7 @@ abstract class WC_Abstract_Order {
wp_update_post( array( 'ID' => $this->id, 'post_status' => 'wc-' . $new_status ) );
$this->post_status = 'wc-' . $new_status;
$this->add_order_note( trim( $note . ' ' . sprintf( __( 'Order status changed from %s to %s.', 'woocommerce' ), wc_get_order_status_name( $old_status ), wc_get_order_status_name( $new_status ) ) ) );
$this->add_order_note( trim( $note . ' ' . sprintf( __( 'Order status changed from %s to %s.', 'woocommerce' ), wc_get_order_status_name( $old_status ), wc_get_order_status_name( $new_status ) ) ), 0, $manual );
// Status was changed
do_action( 'woocommerce_order_status_' . $new_status, $this->id );
@ -2285,7 +2286,6 @@ abstract class WC_Abstract_Order {
* @param $transaction_id string Optional transaction id to store in post meta
*/
public function payment_complete( $transaction_id = '' ) {
do_action( 'woocommerce_pre_payment_complete', $this->id );
if ( null !== WC()->session ) {
@ -2295,57 +2295,43 @@ abstract class WC_Abstract_Order {
$valid_order_statuses = apply_filters( 'woocommerce_valid_order_statuses_for_payment_complete', array( 'on-hold', 'pending', 'failed', 'cancelled' ), $this );
if ( $this->id && $this->has_status( $valid_order_statuses ) ) {
$order_needs_processing = true;
$order_needs_processing = false;
if ( sizeof( $this->get_items() ) > 0 ) {
foreach ( $this->get_items() as $item ) {
if ( $_product = $this->get_product_from_item( $item ) ) {
$virtual_downloadable_item = $_product->is_downloadable() && $_product->is_virtual();
if ( $item['product_id'] > 0 ) {
$_product = $this->get_product_from_item( $item );
if ( false !== $_product && ! apply_filters( 'woocommerce_order_item_needs_processing', ! ( $_product->is_downloadable() && $_product->is_virtual() ), $_product, $this->id ) ) {
$order_needs_processing = false;
continue;
if ( apply_filters( 'woocommerce_order_item_needs_processing', ! $virtual_downloadable_item, $_product, $this->id ) ) {
$order_needs_processing = true;
break;
}
}
$order_needs_processing = true;
break;
}
}
$new_order_status = $order_needs_processing ? 'processing' : 'completed';
$this->update_status( apply_filters( 'woocommerce_payment_complete_order_status', $order_needs_processing ? 'processing' : 'completed', $this->id ) );
$new_order_status = apply_filters( 'woocommerce_payment_complete_order_status', $new_order_status, $this->id );
$this->update_status( $new_order_status );
add_post_meta( $this->id, '_paid_date', current_time('mysql'), true );
add_post_meta( $this->id, '_paid_date', current_time( 'mysql' ), true );
if ( ! empty( $transaction_id ) ) {
add_post_meta( $this->id, '_transaction_id', $transaction_id, true );
}
$this_order = array(
'ID' => $this->id,
'post_date' => current_time( 'mysql', 0 ),
wp_update_post( array(
'ID' => $this->id,
'post_date' => current_time( 'mysql', 0 ),
'post_date_gmt' => current_time( 'mysql', 1 )
);
wp_update_post( $this_order );
) );
if ( apply_filters( 'woocommerce_payment_complete_reduce_order_stock', true, $this->id ) ) {
$this->reduce_order_stock(); // Payment is complete so reduce stock levels
// Payment is complete so reduce stock levels
if ( apply_filters( 'woocommerce_payment_complete_reduce_order_stock', ! get_post_meta( $this->id, '_order_stock_reduced', true ), $this->id ) ) {
$this->reduce_order_stock();
}
do_action( 'woocommerce_payment_complete', $this->id );
} else {
do_action( 'woocommerce_payment_complete_order_status_' . $this->get_status(), $this->id );
}
}
@ -2354,8 +2340,7 @@ abstract class WC_Abstract_Order {
* Record sales
*/
public function record_product_sales() {
if ( 'yes' == get_post_meta( $this->id, '_recorded_sales', true ) ) {
if ( 'yes' === get_post_meta( $this->id, '_recorded_sales', true ) ) {
return;
}
@ -2400,7 +2385,6 @@ abstract class WC_Abstract_Order {
* Increase applied coupon counts
*/
public function increase_coupon_usage_counts() {
if ( 'yes' == get_post_meta( $this->id, '_recorded_coupon_usage_counts', true ) ) {
return;
}
@ -2483,6 +2467,8 @@ abstract class WC_Abstract_Order {
}
}
add_post_meta( $this->id, '_order_stock_reduced', '1', true );
do_action( 'woocommerce_reduce_order_stock', $this );
}
}
@ -2512,6 +2498,8 @@ abstract class WC_Abstract_Order {
if ( ! $notification_sent && 'yes' == get_option( 'woocommerce_notify_low_stock' ) && get_option( 'woocommerce_notify_low_stock_amount' ) >= $new_stock ) {
do_action( 'woocommerce_low_stock', $product );
}
do_action( 'woocommerce_after_send_stock_notifications', $product, $new_stock, $qty_ordered );
}

View File

@ -126,7 +126,7 @@ abstract class WC_Payment_Gateway extends WC_Settings_API {
/**
* Get the order total in checkout and pay_for_order.
*
* @return bool
* @return float
*/
protected function get_order_total() {

View File

@ -177,7 +177,7 @@ class WC_Product {
* @return int
*/
public function get_stock_quantity() {
return $this->managing_stock() ? wc_stock_amount( $this->stock ) : '';
return apply_filters( 'woocommerce_get_stock_quantity', $this->managing_stock() ? wc_stock_amount( $this->stock ) : '', $this );
}
/**
@ -827,7 +827,12 @@ class WC_Product {
$base_tax_amount = array_sum( $base_taxes );
$price = round( $price * $qty - $base_tax_amount, wc_get_price_decimals() );
} elseif ( $tax_rates !== $base_tax_rates ) {
/**
* The woocommerce_adjust_non_base_location_prices filter can stop base taxes being taken off when dealing with out of base locations.
* e.g. If a product costs 10 including tax, all users will pay 10 regardless of location and taxes.
* This feature is experimental @since 2.4.7 and may change in the future. Use at your risk.
*/
} elseif ( $tax_rates !== $base_tax_rates && apply_filters( 'woocommerce_adjust_non_base_location_prices', true ) ) {
$base_taxes = WC_Tax::calc_tax( $price * $qty, $base_tax_rates, true );
$modded_taxes = WC_Tax::calc_tax( ( $price * $qty ) - array_sum( $base_taxes ), $tax_rates, false );
@ -861,7 +866,7 @@ class WC_Product {
$price = $this->get_price();
}
if ( $this->is_taxable() && get_option( 'woocommerce_prices_include_tax' ) === 'yes' ) {
if ( $this->is_taxable() && 'yes' === get_option( 'woocommerce_prices_include_tax' ) ) {
$tax_rates = WC_Tax::get_base_tax_rates( $this->tax_class );
$taxes = WC_Tax::calc_tax( $price * $qty, $tax_rates, true );
$price = WC_Tax::round( $price * $qty - array_sum( $taxes ) );
@ -967,7 +972,7 @@ class WC_Product {
} else {
$price = __( 'Free!', 'woocommerce' );
$price = '<span class="amount">' . __( 'Free!', 'woocommerce' ) . '</span>';
$price = apply_filters( 'woocommerce_free_price_html', $price, $this );

View File

@ -73,51 +73,41 @@ abstract class WC_Shipping_Method extends WC_Settings_API {
* @param array $args (default: array())
*/
public function add_rate( $args = array() ) {
$defaults = array(
$args = wp_parse_args( $args, array(
'id' => '', // ID for the rate
'label' => '', // Label for the rate
'cost' => '0', // Amount or array of costs (per item shipping)
'taxes' => '', // Pass taxes, nothing to have it calculated for you, or 'false' to calc no tax
'calc_tax' => 'per_order' // Calc tax per_order or per_item. Per item needs an array of costs
);
$args = wp_parse_args( $args, $defaults );
extract( $args );
) );
// Id and label are required
if ( ! $id || ! $label ) {
if ( ! $args['id'] || ! $args['label'] ) {
return;
}
// Handle cost
$total_cost = is_array( $cost ) ? array_sum( $cost ) : $cost;
$total_cost = is_array( $args['cost'] ) ? array_sum( $args['cost'] ) : $args['cost'];
$taxes = $args['taxes'];
// Taxes - if not an array and not set to false, calc tax based on cost and passed calc_tax variable
// This saves shipping methods having to do complex tax calculations
if ( ! is_array( $taxes ) && $taxes !== false && $total_cost > 0 && $this->is_taxable() ) {
$taxes = array();
switch ( $calc_tax ) {
switch ( $args['calc_tax'] ) {
case "per_item" :
// If we have an array of costs we can look up each items tax class and add tax accordingly
if ( is_array( $cost ) ) {
if ( is_array( $args['cost'] ) ) {
$cart = WC()->cart->get_cart();
foreach ( $cost as $cost_key => $amount ) {
foreach ( $args['cost'] as $cost_key => $amount ) {
if ( ! isset( $cart[ $cost_key ] ) ) {
continue;
}
$_product = $cart[ $cost_key ]['data'];
$rates = WC_Tax::get_shipping_tax_rates( $_product->get_tax_class() );
$item_taxes = WC_Tax::calc_shipping_tax( $amount, $rates );
$item_taxes = WC_Tax::calc_shipping_tax( $amount, WC_Tax::get_shipping_tax_rates( $cart[ $cost_key ]['data']->get_tax_class() ) );
// Sum the item taxes
foreach ( array_keys( $taxes + $item_taxes ) as $key ) {
@ -126,10 +116,8 @@ abstract class WC_Shipping_Method extends WC_Settings_API {
}
// Add any cost for the order - order costs are in the key 'order'
if ( isset( $cost['order'] ) ) {
$rates = WC_Tax::get_shipping_tax_rates();
$item_taxes = WC_Tax::calc_shipping_tax( $cost['order'], $rates );
if ( isset( $args['cost']['order'] ) ) {
$item_taxes = WC_Tax::calc_shipping_tax( $args['cost']['order'], WC_Tax::get_shipping_tax_rates() );
// Sum the item taxes
foreach ( array_keys( $taxes + $item_taxes ) as $key ) {
@ -137,19 +125,14 @@ abstract class WC_Shipping_Method extends WC_Settings_API {
}
}
}
break;
default :
$rates = WC_Tax::get_shipping_tax_rates();
$taxes = WC_Tax::calc_shipping_tax( $total_cost, $rates );
$taxes = WC_Tax::calc_shipping_tax( $total_cost, WC_Tax::get_shipping_tax_rates() );
break;
}
}
$this->rates[] = new WC_Shipping_Rate( $id, $label, $total_cost, $taxes, $this->id );
$this->rates[] = new WC_Shipping_Rate( $args['id'], $args['label'], $total_cost, $taxes, $this->id );
}
/**

View File

@ -52,7 +52,7 @@ class WC_Admin_API_Keys_Table_List extends WP_List_Table {
* @return string
*/
public function column_cb( $key ) {
return sprintf( '<input type="checkbox" name="%1$s[]" value="%2$s" />', $this->_args['singular'], $key['key_id'] );
return sprintf( '<input type="checkbox" name="key[]" value="%1$s" />', $key['key_id'] );
}
/**

View File

@ -34,27 +34,35 @@ class WC_Admin_Assets {
public function admin_styles() {
global $wp_scripts;
// Sitewide menu CSS
wp_enqueue_style( 'woocommerce_admin_menu_styles', WC()->plugin_url() . '/assets/css/menu.css', array(), WC_VERSION );
$screen = get_current_screen();
$jquery_version = isset( $wp_scripts->registered['jquery-ui-core']->ver ) ? $wp_scripts->registered['jquery-ui-core']->ver : '1.9.2';
$screen = get_current_screen();
// Register admin styles
wp_register_style( 'woocommerce_admin_menu_styles', WC()->plugin_url() . '/assets/css/menu.css', array(), WC_VERSION );
wp_register_style( 'woocommerce_admin_styles', WC()->plugin_url() . '/assets/css/admin.css', array(), WC_VERSION );
wp_register_style( 'jquery-ui-style', '//code.jquery.com/ui/' . $jquery_version . '/themes/smoothness/jquery-ui.css', array(), $jquery_version );
wp_register_style( 'woocommerce_admin_dashboard_styles', WC()->plugin_url() . '/assets/css/dashboard.css', array(), WC_VERSION );
wp_register_style( 'woocommerce_admin_print_reports_styles', WC()->plugin_url() . '/assets/css/reports-print.css', array(), WC_VERSION, 'print' );
// Sitewide menu CSS
wp_enqueue_style( 'woocommerce_admin_menu_styles' );
if ( in_array( $screen->id, wc_get_screen_ids() ) ) {
$jquery_version = isset( $wp_scripts->registered['jquery-ui-core']->ver ) ? $wp_scripts->registered['jquery-ui-core']->ver : '1.9.2';
// Admin styles for WC pages only
wp_enqueue_style( 'woocommerce_admin_styles', WC()->plugin_url() . '/assets/css/admin.css', array(), WC_VERSION );
wp_enqueue_style( 'jquery-ui-style', '//code.jquery.com/ui/' . $jquery_version . '/themes/smoothness/jquery-ui.css', array(), $jquery_version );
wp_enqueue_style( 'woocommerce_admin_styles' );
wp_enqueue_style( 'jquery-ui-style' );
wp_enqueue_style( 'wp-color-picker' );
}
if ( in_array( $screen->id, array( 'dashboard' ) ) ) {
wp_enqueue_style( 'woocommerce_admin_dashboard_styles', WC()->plugin_url() . '/assets/css/dashboard.css', array(), WC_VERSION );
wp_enqueue_style( 'woocommerce_admin_dashboard_styles' );
}
if ( in_array( $screen->id, array( 'woocommerce_page_wc-reports', 'toplevel_page_wc-reports' ) ) ) {
wp_enqueue_style( 'woocommerce_admin_print_reports_styles', WC()->plugin_url() . '/assets/css/reports-print.css', array(), WC_VERSION, 'print' );
wp_enqueue_style( 'woocommerce_admin_print_reports_styles' );
}
/**
@ -84,13 +92,18 @@ class WC_Admin_Assets {
wp_register_script( 'woocommerce_admin', WC()->plugin_url() . '/assets/js/admin/woocommerce_admin' . $suffix . '.js', array( 'jquery', 'jquery-blockui', 'jquery-ui-sortable', 'jquery-ui-widget', 'jquery-ui-core', 'jquery-tiptip' ), WC_VERSION );
wp_register_script( 'jquery-blockui', WC()->plugin_url() . '/assets/js/jquery-blockui/jquery.blockUI' . $suffix . '.js', array( 'jquery' ), '2.70', true );
wp_register_script( 'jquery-tiptip', WC()->plugin_url() . '/assets/js/jquery-tiptip/jquery.tipTip' . $suffix . '.js', array( 'jquery' ), WC_VERSION, true );
wp_register_script( 'accounting', WC()->plugin_url() . '/assets/js/admin/accounting' . $suffix . '.js', array( 'jquery' ), '0.4.2' );
wp_register_script( 'round', WC()->plugin_url() . '/assets/js/admin/round' . $suffix . '.js', array( 'jquery' ), WC_VERSION );
wp_register_script( 'wc-admin-meta-boxes', WC()->plugin_url() . '/assets/js/admin/meta-boxes' . $suffix . '.js', array( 'jquery', 'jquery-ui-datepicker', 'jquery-ui-sortable', 'accounting', 'round', 'wc-enhanced-select', 'plupload-all', 'stupidtable' ), WC_VERSION );
wp_register_script( 'accounting', WC()->plugin_url() . '/assets/js/accounting/accounting' . $suffix . '.js', array( 'jquery' ), '0.4.2' );
wp_register_script( 'round', WC()->plugin_url() . '/assets/js/round/round' . $suffix . '.js', array( 'jquery' ), WC_VERSION );
wp_register_script( 'wc-admin-meta-boxes', WC()->plugin_url() . '/assets/js/admin/meta-boxes' . $suffix . '.js', array( 'jquery', 'jquery-ui-datepicker', 'jquery-ui-sortable', 'accounting', 'round', 'wc-enhanced-select', 'plupload-all', 'stupidtable', 'jquery-tiptip' ), WC_VERSION );
wp_register_script( 'zeroclipboard', WC()->plugin_url() . '/assets/js/zeroclipboard/jquery.zeroclipboard' . $suffix . '.js', array( 'jquery' ), WC_VERSION );
wp_register_script( 'qrcode', WC()->plugin_url() . '/assets/js/jquery-qrcode/jquery.qrcode' . $suffix . '.js', array( 'jquery' ), WC_VERSION );
wp_register_script( 'stupidtable', WC()->plugin_url() . '/assets/js/stupidtable/stupidtable' . $suffix . '.js', array( 'jquery' ), WC_VERSION );
wp_register_script( 'serializejson', WC()->plugin_url() . '/assets/js/jquery-serializejson/jquery.serializejson' . $suffix . '.js', array( 'jquery' ), '2.6.1' );
wp_register_script( 'flot', WC()->plugin_url() . '/assets/js/jquery-flot/jquery.flot' . $suffix . '.js', array( 'jquery' ), WC_VERSION );
wp_register_script( 'flot-resize', WC()->plugin_url() . '/assets/js/jquery-flot/jquery.flot.resize' . $suffix . '.js', array( 'jquery', 'flot' ), WC_VERSION );
wp_register_script( 'flot-time', WC()->plugin_url() . '/assets/js/jquery-flot/jquery.flot.time' . $suffix . '.js', array( 'jquery', 'flot' ), WC_VERSION );
wp_register_script( 'flot-pie', WC()->plugin_url() . '/assets/js/jquery-flot/jquery.flot.pie' . $suffix . '.js', array( 'jquery', 'flot' ), WC_VERSION );
wp_register_script( 'flot-stack', WC()->plugin_url() . '/assets/js/jquery-flot/jquery.flot.stack' . $suffix . '.js', array( 'jquery', 'flot' ), WC_VERSION );
// Chosen is @deprecated (2.3) in favour of select2, but is registered for backwards compat
wp_register_script( 'ajax-chosen', WC()->plugin_url() . '/assets/js/chosen/ajax-chosen.jquery' . $suffix . '.js', array( 'jquery', 'chosen' ), WC_VERSION );
@ -153,14 +166,18 @@ class WC_Admin_Assets {
// Products
if ( in_array( $screen->id, array( 'edit-product' ) ) ) {
wp_enqueue_script( 'woocommerce_quick-edit', WC()->plugin_url() . '/assets/js/admin/quick-edit' . $suffix . '.js', array( 'jquery' ), WC_VERSION );
wp_register_script( 'woocommerce_quick-edit', WC()->plugin_url() . '/assets/js/admin/quick-edit' . $suffix . '.js', array( 'jquery' ), WC_VERSION );
wp_enqueue_script( 'woocommerce_quick-edit' );
}
// Meta boxes
if ( in_array( $screen->id, array( 'product', 'edit-product' ) ) ) {
wp_enqueue_media();
wp_enqueue_script( 'wc-admin-product-meta-boxes', WC()->plugin_url() . '/assets/js/admin/meta-boxes-product' . $suffix . '.js', array( 'wc-admin-meta-boxes' ), WC_VERSION );
wp_enqueue_script( 'wc-admin-variation-meta-boxes', WC()->plugin_url() . '/assets/js/admin/meta-boxes-product-variation' . $suffix . '.js', array( 'wc-admin-meta-boxes', 'serializejson' ), WC_VERSION );
wp_register_script( 'wc-admin-product-meta-boxes', WC()->plugin_url() . '/assets/js/admin/meta-boxes-product' . $suffix . '.js', array( 'wc-admin-meta-boxes' ), WC_VERSION );
wp_register_script( 'wc-admin-variation-meta-boxes', WC()->plugin_url() . '/assets/js/admin/meta-boxes-product-variation' . $suffix . '.js', array( 'wc-admin-meta-boxes', 'serializejson' ), WC_VERSION );
wp_enqueue_script( 'wc-admin-product-meta-boxes' );
wp_enqueue_script( 'wc-admin-variation-meta-boxes' );
$params = array(
'post_id' => isset( $post->ID ) ? $post->ID : '',
@ -190,14 +207,17 @@ class WC_Admin_Assets {
'i18n_edited_variations' => esc_js( __( 'Save changes before changing page?', 'woocommerce' ) ),
'i18n_variation_count_single' => esc_js( __( '%qty% variation', 'woocommerce' ) ),
'i18n_variation_count_plural' => esc_js( __( '%qty% variations', 'woocommerce' ) ),
'variations_per_page' => absint( apply_filters( 'woocommerce_admin_meta_boxes_variations_per_page', 10 ) )
'variations_per_page' => absint( apply_filters( 'woocommerce_admin_meta_boxes_variations_per_page', 15 ) )
);
wp_localize_script( 'wc-admin-variation-meta-boxes', 'woocommerce_admin_meta_boxes_variations', $params );
}
if ( in_array( str_replace( 'edit-', '', $screen->id ), wc_get_order_types( 'order-meta-boxes' ) ) ) {
wp_enqueue_script( 'wc-admin-order-meta-boxes', WC()->plugin_url() . '/assets/js/admin/meta-boxes-order' . $suffix . '.js', array( 'wc-admin-meta-boxes' ), WC_VERSION );
wp_enqueue_script( 'wc-admin-order-meta-boxes-modal', WC()->plugin_url() . '/assets/js/admin/order-backbone-modal' . $suffix . '.js', array( 'underscore', 'backbone', 'wc-admin-order-meta-boxes' ), WC_VERSION );
wp_register_script( 'wc-admin-order-meta-boxes', WC()->plugin_url() . '/assets/js/admin/meta-boxes-order' . $suffix . '.js', array( 'wc-admin-meta-boxes' ), WC_VERSION );
wp_register_script( 'wc-admin-order-meta-boxes-modal', WC()->plugin_url() . '/assets/js/admin/order-backbone-modal' . $suffix . '.js', array( 'underscore', 'backbone', 'wp-util', 'wc-admin-order-meta-boxes' ), WC_VERSION );
wp_enqueue_script( 'wc-admin-order-meta-boxes' );
wp_enqueue_script( 'wc-admin-order-meta-boxes-modal' );
$params = array(
'countries' => json_encode( array_merge( WC()->countries->get_allowed_country_states(), WC()->countries->get_shipping_country_states() ) ),
@ -207,7 +227,8 @@ class WC_Admin_Assets {
wp_localize_script( 'wc-admin-order-meta-boxes', 'woocommerce_admin_meta_boxes_order', $params );
}
if ( in_array( $screen->id, array( 'shop_coupon', 'edit-shop_coupon' ) ) ) {
wp_enqueue_script( 'wc-admin-coupon-meta-boxes', WC()->plugin_url() . '/assets/js/admin/meta-boxes-coupon' . $suffix . '.js', array( 'wc-admin-meta-boxes' ), WC_VERSION );
wp_register_script( 'wc-admin-coupon-meta-boxes', WC()->plugin_url() . '/assets/js/admin/meta-boxes-coupon' . $suffix . '.js', array( 'wc-admin-meta-boxes' ), WC_VERSION );
wp_enqueue_script( 'wc-admin-coupon-meta-boxes' );
}
if ( in_array( str_replace( 'edit-', '', $screen->id ), array_merge( array( 'shop_coupon', 'product' ), wc_get_order_types( 'order-meta-boxes' ) ) ) ) {
$params = array(
@ -284,22 +305,26 @@ class WC_Admin_Assets {
// Product sorting - only when sorting by menu order on the products page
if ( current_user_can( 'edit_others_pages' ) && $screen->id == 'edit-product' && isset( $wp_query->query['orderby'] ) && $wp_query->query['orderby'] == 'menu_order title' ) {
wp_enqueue_script( 'woocommerce_product_ordering', WC()->plugin_url() . '/assets/js/admin/product-ordering' . $suffix . '.js', array( 'jquery-ui-sortable' ), WC_VERSION, true );
wp_register_script( 'woocommerce_product_ordering', WC()->plugin_url() . '/assets/js/admin/product-ordering' . $suffix . '.js', array( 'jquery-ui-sortable' ), WC_VERSION, true );
wp_enqueue_script( 'woocommerce_product_ordering' );
}
// Reports Pages
if ( in_array( $screen->id, apply_filters( 'woocommerce_reports_screen_ids', array( $wc_screen_id . '_page_wc-reports', 'toplevel_page_wc-reports', 'dashboard' ) ) ) ) {
wp_enqueue_script( 'wc-reports', WC()->plugin_url() . '/assets/js/admin/reports' . $suffix . '.js', array( 'jquery', 'jquery-ui-datepicker' ), WC_VERSION );
wp_enqueue_script( 'flot', WC()->plugin_url() . '/assets/js/admin/jquery.flot' . $suffix . '.js', array( 'jquery' ), WC_VERSION );
wp_enqueue_script( 'flot-resize', WC()->plugin_url() . '/assets/js/admin/jquery.flot.resize' . $suffix . '.js', array( 'jquery', 'flot' ), WC_VERSION );
wp_enqueue_script( 'flot-time', WC()->plugin_url() . '/assets/js/admin/jquery.flot.time' . $suffix . '.js', array( 'jquery', 'flot' ), WC_VERSION );
wp_enqueue_script( 'flot-pie', WC()->plugin_url() . '/assets/js/admin/jquery.flot.pie' . $suffix . '.js', array( 'jquery', 'flot' ), WC_VERSION );
wp_enqueue_script( 'flot-stack', WC()->plugin_url() . '/assets/js/admin/jquery.flot.stack' . $suffix . '.js', array( 'jquery', 'flot' ), WC_VERSION );
wp_register_script( 'wc-reports', WC()->plugin_url() . '/assets/js/admin/reports' . $suffix . '.js', array( 'jquery', 'jquery-ui-datepicker' ), WC_VERSION );
wp_enqueue_script( 'wc-reports' );
wp_enqueue_script( 'flot' );
wp_enqueue_script( 'flot-resize' );
wp_enqueue_script( 'flot-time' );
wp_enqueue_script( 'flot-pie' );
wp_enqueue_script( 'flot-stack' );
}
// API settings
if ( $wc_screen_id . '_page_wc-settings' === $screen->id && isset( $_GET['section'] ) && 'keys' == $_GET['section'] ) {
wp_enqueue_script( 'wc-api-keys', WC()->plugin_url() . '/assets/js/admin/api-keys' . $suffix . '.js', array( 'jquery', 'woocommerce_admin', 'underscore', 'backbone', 'wp-util', 'qrcode', 'zeroclipboard' ), WC_VERSION, true );
wp_register_script( 'wc-api-keys', WC()->plugin_url() . '/assets/js/admin/api-keys' . $suffix . '.js', array( 'jquery', 'woocommerce_admin', 'underscore', 'backbone', 'wp-util', 'qrcode', 'zeroclipboard' ), WC_VERSION, true );
wp_enqueue_script( 'wc-api-keys' );
wp_localize_script(
'wc-api-keys',
'woocommerce_admin_api_keys',
@ -316,7 +341,8 @@ class WC_Admin_Assets {
}
if ( in_array( $screen->id, array( 'user-edit', 'profile' ) ) ) {
wp_enqueue_script( 'wc-users', WC()->plugin_url() . '/assets/js/admin/users' . $suffix . '.js', array( 'jquery', 'wc-enhanced-select' ), WC_VERSION, true );
wp_register_script( 'wc-users', WC()->plugin_url() . '/assets/js/admin/users' . $suffix . '.js', array( 'jquery', 'wc-enhanced-select' ), WC_VERSION, true );
wp_enqueue_script( 'wc-users' );
wp_localize_script(
'wc-users',
'wc_users_params',

View File

@ -164,7 +164,7 @@ class WC_Admin_Help {
'title' => __( 'WooCommerce 101', 'woocommerce' ),
'content' =>
'<h2><a href="http://docs.woothemes.com/document/woocommerce-101-video-series/?utm_source=WooCommerce&utm_medium=Wizard&utm_content=Videos&utm_campaign=Onboarding">' . __( 'WooCommerce 101', 'woocommerce' ) . '</a> &ndash; ' . esc_html( $video_map[ $video_key ]['title'] ) . '</h2>' .
'<iframe class="wistia_embed" name="wistia_embed" src="' . esc_url( $video_map[ $video_key ]['url'] ) . '" allowtransparency="true" frameborder="0" scrolling="no" width="480" height="298"></iframe>'
'<iframe src="' . esc_url( $video_map[ $video_key ]['url'] ) . '" allowtransparency="true" frameborder="0" scrolling="no" class="wistia_embed" name="wistia_embed" allowfullscreen mozallowfullscreen webkitallowfullscreen oallowfullscreen msallowfullscreen width="480" height="298"></iframe>'
) );
}

View File

@ -81,6 +81,7 @@ class WC_Admin_Post_Types {
add_filter( 'enter_title_here', array( $this, 'enter_title_here' ), 1, 2 );
add_action( 'edit_form_after_title', array( $this, 'edit_form_after_title' ) );
add_filter( 'media_view_strings', array( $this, 'change_insert_into_post' ) );
add_filter( 'default_hidden_meta_boxes', array( $this, 'hidden_meta_boxes' ), 10, 2 );
add_action( 'post_submitbox_misc_actions', array( $this, 'product_data_visibility' ) );
// Uploads
@ -99,6 +100,12 @@ class WC_Admin_Post_Types {
// Disable DFW feature pointer
add_action( 'admin_footer', array( $this, 'disable_dfw_feature_pointer' ) );
// If first time editing, disable columns by default.
if ( false === get_user_option( 'manageedit-shop_ordercolumnshidden' ) ) {
$user = wp_get_current_user();
update_user_option( $user->ID, 'manageedit-shop_ordercolumnshidden', array( 0 => 'billing_address' ), true );
}
}
/**
@ -260,6 +267,7 @@ class WC_Admin_Post_Types {
$columns['order_status'] = '<span class="status_head tips" data-tip="' . esc_attr__( 'Status', 'woocommerce' ) . '">' . esc_attr__( 'Status', 'woocommerce' ) . '</span>';
$columns['order_title'] = __( 'Order', 'woocommerce' );
$columns['order_items'] = __( 'Purchased', 'woocommerce' );
$columns['billing_address'] = __( 'Billing', 'woocommerce' );
$columns['shipping_address'] = __( 'Ship to', 'woocommerce' );
$columns['customer_message'] = '<span class="notes_head tips" data-tip="' . esc_attr__( 'Customer Message', 'woocommerce' ) . '">' . esc_attr__( 'Customer Message', 'woocommerce' ) . '</span>';
$columns['order_notes'] = '<span class="order-notes_head tips" data-tip="' . esc_attr__( 'Order Notes', 'woocommerce' ) . '">' . esc_attr__( 'Order Notes', 'woocommerce' ) . '</span>';
@ -657,6 +665,19 @@ class WC_Admin_Post_Types {
} else echo '&ndash;';
break;
case 'billing_address' :
if ( $address = $the_order->get_formatted_billing_address() ) {
echo esc_html( preg_replace( '#<br\s*/?>#i', ', ', $address ) );
} else {
echo '&ndash;';
}
if ( $the_order->billing_phone ) {
echo '<small class="meta">' . __( 'Tel:', 'woocommerce' ) . ' ' . esc_html( $the_order->billing_phone ) . '</small>';
}
break;
case 'shipping_address' :
if ( $address = $the_order->get_formatted_shipping_address() ) {
@ -699,11 +720,7 @@ class WC_Admin_Post_Types {
break;
case 'order_total' :
if ( $the_order->get_total_refunded() > 0 ) {
echo '<del>' . strip_tags( $the_order->get_formatted_order_total() ) . '</del> <ins>' . wc_price( $the_order->get_total() - $the_order->get_total_refunded(), array( 'currency' => $the_order->get_order_currency() ) ) . '</ins>';
} else {
echo esc_html( strip_tags( $the_order->get_formatted_order_total() ) );
}
echo $the_order->get_formatted_order_total();
if ( $the_order->payment_method_title ) {
echo '<small class="meta">' . __( 'Via', 'woocommerce' ) . ' ' . esc_html( $the_order->payment_method_title ) . '</small>';
@ -711,18 +728,6 @@ class WC_Admin_Post_Types {
break;
case 'order_title' :
$customer_tip = array();
if ( $address = $the_order->get_formatted_billing_address() ) {
$customer_tip[] = __( 'Billing:', 'woocommerce' ) . ' ' . $address . '<br/><br/>';
}
if ( $the_order->billing_phone ) {
$customer_tip[] = __( 'Tel:', 'woocommerce' ) . ' ' . $the_order->billing_phone;
}
echo '<div class="tips" data-tip="' . wc_sanitize_tooltip( implode( "<br/>", $customer_tip ) ) . '">';
if ( $the_order->user_id ) {
$user_info = get_userdata( $the_order->user_id );
}
@ -753,7 +758,7 @@ class WC_Admin_Post_Types {
echo '<small class="meta email"><a href="' . esc_url( 'mailto:' . $the_order->billing_email ) . '">' . esc_html( $the_order->billing_email ) . '</a></small>';
}
echo '</div>';
echo '<button type="button" class="toggle-row"><span class="screen-reader-text">' . __( 'Show more details', 'woocommerce' ) . '</span></button>';
break;
case 'order_actions' :
@ -1446,7 +1451,7 @@ class WC_Admin_Post_Types {
foreach ( $post_ids as $post_id ) {
$order = wc_get_order( $post_id );
$order->update_status( $new_status, __( 'Order status changed by bulk edit:', 'woocommerce' ) );
$order->update_status( $new_status, __( 'Order status changed by bulk edit:', 'woocommerce' ), true );
do_action( 'woocommerce_order_edit_status', $post_id, $new_status );
$changed++;
}
@ -2036,7 +2041,6 @@ class WC_Admin_Post_Types {
/**
* Change title boxes in admin.
*
* @param string $text
* @param object $post
* @return string
@ -2055,11 +2059,10 @@ class WC_Admin_Post_Types {
}
/**
* Print coupon description textarea field
*
* Print coupon description textarea field.
* @param WP_Post $post
*/
public function edit_form_after_title( $post ) {
public function edit_form_after_title( $post ) {
if ( 'shop_coupon' === $post->post_type ) {
?>
<textarea id="woocommerce-coupon-description" name="excerpt" cols="5" rows="2" placeholder="<?php esc_attr_e( 'Description (optional)', 'woocommerce' ); ?>"><?php echo esc_textarea( $post->post_excerpt ); ?></textarea>
@ -2069,8 +2072,7 @@ class WC_Admin_Post_Types {
/**
* Change label for insert buttons.
*
* @param array $strings
* @param array $strings
* @return array
*/
public function change_insert_into_post( $strings ) {
@ -2086,6 +2088,20 @@ class WC_Admin_Post_Types {
return $strings;
}
/**
* Hidden default Meta-Boxes.
* @param array $hidden
* @param object $screen
* @return array
*/
public function hidden_meta_boxes( $hidden, $screen ) {
if ( 'product' === $screen->post_type && 'post' === $screen->base ) {
$hidden = array_merge( $hidden, array( 'postcustom' ) );
}
return $hidden;
}
/**
* Output product visibility options.
*/
@ -2123,7 +2139,7 @@ class WC_Admin_Post_Types {
<input type="hidden" name="current_featured" id="current_featured" value="<?php echo esc_attr( $current_featured ); ?>" />
<?php
echo '<p>' . __( 'Define the loops this product should be visible in. The product will still be accessible directly.', 'woocommerce' ) . '</p>';
echo '<p>' . __( 'Choose where this product should be displayed in your catalog. The product will always be accessible directly.', 'woocommerce' ) . '</p>';
foreach ( $visibility_options as $name => $label ) {
echo '<input type="radio" name="_visibility" id="_visibility_' . esc_attr( $name ) . '" value="' . esc_attr( $name ) . '" ' . checked( $current_visibility, $name, false ) . ' data-label="' . esc_attr( $label ) . '" /> <label for="_visibility_' . esc_attr( $name ) . '" class="selectit">' . esc_html( $label ) . '</label><br />';
@ -2205,7 +2221,7 @@ class WC_Admin_Post_Types {
foreach ( $existing_permissions as $existing_permission ) {
$order = wc_get_order( $existing_permission->order_id );
if ( $order->id ) {
if ( ! empty( $order->id ) ) {
// Remove permissions
if ( ! empty( $removed_download_ids ) ) {
foreach ( $removed_download_ids as $download_id ) {
@ -2221,7 +2237,7 @@ class WC_Admin_Post_Types {
if ( apply_filters( 'woocommerce_process_product_file_download_paths_grant_access_to_new_file', true, $download_id, $product_id, $order ) ) {
// grant permission if it doesn't already exist
if ( ! $wpdb->get_var( $wpdb->prepare( "SELECT 1 FROM {$wpdb->prefix}woocommerce_downloadable_product_permissions WHERE order_id = %d AND product_id = %d AND download_id = %s", $order->id, $product_id, $download_id ) ) ) {
if ( ! $wpdb->get_var( $wpdb->prepare( "SELECT 1=1 FROM {$wpdb->prefix}woocommerce_downloadable_product_permissions WHERE order_id = %d AND product_id = %d AND download_id = %s", $order->id, $product_id, $download_id ) ) ) {
wc_downloadable_file_permission( $download_id, $product_id, $order );
}
}

View File

@ -690,6 +690,7 @@ class WC_Admin_Settings {
$value = array_filter( array_map( 'wc_clean', (array) $raw_value ) );
break;
case 'image_width' :
$value = array();
if ( isset( $raw_value['width'] ) ) {
$value['width'] = wc_clean( $raw_value['width'] );
$value['height'] = wc_clean( $raw_value['height'] );
@ -767,7 +768,7 @@ class WC_Admin_Settings {
public static function check_download_folder_protection() {
$upload_dir = wp_upload_dir();
$downloads_url = $upload_dir['basedir'] . '/woocommerce_uploads';
$download_method = get_option('woocommerce_file_download_method');
$download_method = get_option( 'woocommerce_file_download_method' );
if ( 'redirect' == $download_method ) {

View File

@ -26,10 +26,8 @@ class WC_Admin_Setup_Wizard {
/** @var array Tweets user can optionally send after install */
private $tweets = array(
'WooCommerce kickstarts online stores. It\'s free and has been downloaded over 6 million times.',
'Building an online store? WooCommerce is the leading #eCommerce plugin for WordPress (and it\'s free).',
'WooCommerce is a free #eCommerce plugin for #WordPress for selling #allthethings online, beautifully.',
'Ready to ship your idea? WooCommerce is the fastest growing #eCommerce plugin for WordPress on the web'
'Someone give me woo-t, I just set up a new store with #WordPress and @WooCommerce!',
'Someone give me high five, I just set up a new store with #WordPress and @WooCommerce!'
);
/**
@ -91,6 +89,7 @@ class WC_Admin_Setup_Wizard {
$this->step = isset( $_GET['step'] ) ? sanitize_key( $_GET['step'] ) : current( array_keys( $this->steps ) );
$suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
wp_register_script( 'jquery-blockui', WC()->plugin_url() . '/assets/js/jquery-blockui/jquery.blockUI' . $suffix . '.js', array( 'jquery' ), '2.70', true );
wp_register_script( 'select2', WC()->plugin_url() . '/assets/js/select2/select2' . $suffix . '.js', array( 'jquery' ), '3.5.2' );
wp_register_script( 'wc-enhanced-select', WC()->plugin_url() . '/assets/js/admin/wc-enhanced-select' . $suffix . '.js', array( 'jquery', 'select2' ), WC_VERSION );
wp_localize_script( 'wc-enhanced-select', 'wc_enhanced_select_params', array(
@ -113,7 +112,7 @@ class WC_Admin_Setup_Wizard {
wp_enqueue_style( 'woocommerce_admin_styles', WC()->plugin_url() . '/assets/css/admin.css', array(), WC_VERSION );
wp_enqueue_style( 'wc-setup', WC()->plugin_url() . '/assets/css/wc-setup.css', array( 'dashicons', 'install' ), WC_VERSION );
wp_register_script( 'wc-setup', WC()->plugin_url() . '/assets/js/admin/wc-setup.min.js', array( 'jquery', 'wc-enhanced-select' ), WC_VERSION );
wp_register_script( 'wc-setup', WC()->plugin_url() . '/assets/js/admin/wc-setup.min.js', array( 'jquery', 'wc-enhanced-select', 'jquery-blockui' ), WC_VERSION );
wp_localize_script( 'wc-setup', 'wc_setup_params', array(
'locale_info' => json_encode( include( WC()->plugin_path() . '/i18n/locale-info.php' ) )
) );
@ -132,7 +131,7 @@ class WC_Admin_Setup_Wizard {
public function get_next_step_link() {
$keys = array_keys( $this->steps );
return add_query_arg( 'step', $keys[ array_search( $this->step, array_keys( $this->steps ) ) + 1 ] );
return add_query_arg( 'step', $keys[ array_search( $this->step, array_keys( $this->steps ) ) + 1 ], remove_query_arg( 'translation_updated' ) );
}
/**
@ -147,7 +146,8 @@ class WC_Admin_Setup_Wizard {
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><?php _e( 'WooCommerce &rsaquo; Setup Wizard', 'woocommerce' ); ?></title>
<?php wp_print_scripts( 'wc-setup' ); ?>
<?php do_action( 'admin_print_styles' ); ?>
<?php do_action( 'admin_print_styles' ); ?>
<?php do_action( 'admin_head' ); ?>
</head>
<body class="wc-setup wp-core-ui">
<h1 id="wc-logo"><a href="http://woothemes.com/woocommerce"><img src="<?php echo WC()->plugin_url(); ?>/assets/images/woocommerce_logo.png" alt="WooCommerce" /></a></h1>
@ -201,13 +201,27 @@ class WC_Admin_Setup_Wizard {
* Introduction step
*/
public function wc_setup_introduction() {
$locale = get_locale();
if ( isset( $_GET['translation_updated'] ) ) {
WC_Language_Pack_Upgrader::language_update_messages();
} elseif( 'en_US' !== $locale && WC_Language_Pack_Upgrader::has_available_update( $locale ) ) {
?>
<div class="woocommerce-message woocommerce-language-pack">
<p><?php printf( esc_html__( 'WooCommerce is available in %s. Would you like to use this translation?', 'woocommerce' ), $locale ); ?></p>
<p class="submit">
<a href="<?php echo esc_url( wp_nonce_url( admin_url( 'index.php?page=wc-setup&action=translation_upgrade' ), 'setup_language' ) ); ?>" class="button-primary"><?php _e( 'Install Translation', 'woocommerce' ); ?></a>
</p>
</div>
<?php
}
?>
<h1><?php _e( 'Welcome to the world of WooCommerce!', 'woocommerce' ); ?></h1>
<p><?php _e( 'Thank you for choosing WooCommerce to power your online store! This quick setup wizard will help you configure the basic settings. <strong>Its completely optional and shouldnt take longer than five minutes.</strong>', 'woocommerce' ); ?></p>
<p><?php _e( 'No time right now? If you dont want to go through the wizard, you can skip and return to the WordPress dashboard. Come back anytime if you change your mind!', 'woocommerce' ); ?></p>
<p class="wc-setup-actions step">
<a href="<?php echo esc_url( $this->get_next_step_link() ); ?>" class="button-primary button button-large"><?php _e( 'Let\'s Go!', 'woocommerce' ); ?></a>
<a href="<?php echo esc_url( admin_url( 'plugins.php' ) ); ?>" class="button button-large"><?php _e( 'Not right now', 'woocommerce' ); ?></a>
<a href="<?php echo esc_url( $this->get_next_step_link() ); ?>" class="button-primary button button-large button-next"><?php _e( 'Let\'s Go!', 'woocommerce' ); ?></a>
<a href="<?php echo esc_url( wp_get_referer() ? wp_get_referer() : admin_url( 'plugins.php' ) ); ?>" class="button button-large"><?php _e( 'Not right now', 'woocommerce' ); ?></a>
</p>
<?php
}
@ -254,8 +268,8 @@ class WC_Admin_Setup_Wizard {
<p><?php printf( __( 'Once created, these pages can be managed from your admin dashboard on the %sPages screen%s. You can control which pages are shown on your website via %sAppearance > Menus%s.', 'woocommerce' ), '<a href="' . esc_url( admin_url( 'edit.php?post_type=page' ) ) . '" target="_blank">', '</a>', '<a href="' . esc_url( admin_url( 'nav-menus.php' ) ) . '" target="_blank">', '</a>' ); ?></p>
<p class="wc-setup-actions step">
<input type="submit" class="button-primary button button-large" value="<?php esc_attr_e( 'Continue', 'woocommerce' ); ?>" name="save_step" />
<a href="<?php echo esc_url( $this->get_next_step_link() ); ?>" class="button button-large"><?php _e( 'Skip this step', 'woocommerce' ); ?></a>
<input type="submit" class="button-primary button button-large button-next" value="<?php esc_attr_e( 'Continue', 'woocommerce' ); ?>" name="save_step" />
<a href="<?php echo esc_url( $this->get_next_step_link() ); ?>" class="button button-large button-next"><?php _e( 'Skip this step', 'woocommerce' ); ?></a>
<?php wp_nonce_field( 'wc-setup' ); ?>
</p>
</form>
@ -269,7 +283,7 @@ class WC_Admin_Setup_Wizard {
check_admin_referer( 'wc-setup' );
WC_Install::create_pages();
wp_redirect( $this->get_next_step_link() );
wp_redirect( esc_url_raw( $this->get_next_step_link() ) );
exit;
}
@ -285,8 +299,8 @@ class WC_Admin_Setup_Wizard {
// Defaults
$currency = get_option( 'woocommerce_currency', 'GBP' );
$currency_pos = get_option( 'woocommerce_currency_pos', 'left' );
$decimal_sep = get_option( 'woocommerce_decimal_sep', '.' );
$thousand_sep = get_option( 'woocommerce_thousand_sep', ',' );
$decimal_sep = get_option( 'woocommerce_price_decimal_sep', '.' );
$thousand_sep = get_option( 'woocommerce_price_thousand_sep', ',' );
$dimension_unit = get_option( 'woocommerce_dimension_unit', 'cm' );
$weight_unit = get_option( 'woocommerce_weight_unit', 'kg' );
?>
@ -363,8 +377,8 @@ class WC_Admin_Setup_Wizard {
</tr>
</table>
<p class="wc-setup-actions step">
<input type="submit" class="button-primary button button-large" value="<?php esc_attr_e( 'Continue', 'woocommerce' ); ?>" name="save_step" />
<a href="<?php echo esc_url( $this->get_next_step_link() ); ?>" class="button button-large"><?php _e( 'Skip this step', 'woocommerce' ); ?></a>
<input type="submit" class="button-primary button button-large button-next" value="<?php esc_attr_e( 'Continue', 'woocommerce' ); ?>" name="save_step" />
<a href="<?php echo esc_url( $this->get_next_step_link() ); ?>" class="button button-large button-next"><?php _e( 'Skip this step', 'woocommerce' ); ?></a>
<?php wp_nonce_field( 'wc-setup' ); ?>
</p>
</form>
@ -388,12 +402,12 @@ class WC_Admin_Setup_Wizard {
update_option( 'woocommerce_default_country', $store_location );
update_option( 'woocommerce_currency', $currency_code );
update_option( 'woocommerce_currency_pos', $currency_pos );
update_option( 'woocommerce_decimal_sep', $decimal_sep );
update_option( 'woocommerce_thousand_sep', $thousand_sep );
update_option( 'woocommerce_price_decimal_sep', $decimal_sep );
update_option( 'woocommerce_price_thousand_sep', $thousand_sep );
update_option( 'woocommerce_weight_unit', $weight_unit );
update_option( 'woocommerce_dimension_unit', $dimension_unit );
wp_redirect( $this->get_next_step_link() );
wp_redirect( esc_url_raw( $this->get_next_step_link() ) );
exit;
}
@ -520,8 +534,8 @@ class WC_Admin_Setup_Wizard {
?>
</table>
<p class="wc-setup-actions step">
<input type="submit" class="button-primary button button-large" value="<?php esc_attr_e( 'Continue', 'woocommerce' ); ?>" name="save_step" />
<a href="<?php echo esc_url( $this->get_next_step_link() ); ?>" class="button button-large"><?php _e( 'Skip this step', 'woocommerce' ); ?></a>
<input type="submit" class="button-primary button button-large button-next" value="<?php esc_attr_e( 'Continue', 'woocommerce' ); ?>" name="save_step" />
<a href="<?php echo esc_url( $this->get_next_step_link() ); ?>" class="button button-large button-next"><?php _e( 'Skip this step', 'woocommerce' ); ?></a>
<?php wp_nonce_field( 'wc-setup' ); ?>
</p>
</form>
@ -548,7 +562,7 @@ class WC_Admin_Setup_Wizard {
// Init rate and settings
$shipping_method = new WC_Shipping_Flat_Rate();
$costs = array();
$costs[] = woocommerce_format_decimal( sanitize_text_field( $_POST['shipping_cost_domestic'] ) );
$costs[] = wc_format_decimal( sanitize_text_field( $_POST['shipping_cost_domestic'] ) );
if ( $item_cost = sanitize_text_field( $_POST['shipping_cost_domestic_item'] ) ) {
$costs[] = $item_cost . ' * [qty]';
}
@ -568,7 +582,7 @@ class WC_Admin_Setup_Wizard {
// Init rate and settings
$shipping_method = new WC_Shipping_International_Delivery();
$costs = array();
$costs[] = woocommerce_format_decimal( sanitize_text_field( $_POST['shipping_cost_international'] ) );
$costs[] = wc_format_decimal( sanitize_text_field( $_POST['shipping_cost_international'] ) );
if ( $item_cost = sanitize_text_field( $_POST['shipping_cost_international_item'] ) ) {
$costs[] = $item_cost . ' * [qty]';
}
@ -618,7 +632,7 @@ class WC_Admin_Setup_Wizard {
}
}
wp_redirect( $this->get_next_step_link() );
wp_redirect( esc_url_raw( $this->get_next_step_link() ) );
exit;
}
@ -633,7 +647,7 @@ class WC_Admin_Setup_Wizard {
?>
<h1><?php _e( 'Payments', 'woocommerce' ); ?></h1>
<form method="post">
<p><?php printf( __( 'WooCommerce comes with some payment gateways pre-installed. %2$sAdditonal gateways%3$s can be installed later. Payment Gateways can be setup, enabled and disabled from the %1$scheckout settings%3$s screen.', 'woocommerce' ), '<a href="' . admin_url( 'admin.php?page=wc-settings&tab=checkout' ) . '" target="_blank">', '<a href="' . admin_url( 'admin.php?page=wc-addons&view=payment-gateways' ) . '" target="_blank">', '</a>' ); ?></p>
<p><?php printf( __( 'WooCommerce can accept both online and offline payments. %2$sAdditional payment methods%3$s can be installed later and managed from the %1$scheckout settings%3$s screen.', 'woocommerce' ), '<a href="' . admin_url( 'admin.php?page=wc-settings&tab=checkout' ) . '" target="_blank">', '<a href="' . admin_url( 'admin.php?page=wc-addons&view=payment-gateways' ) . '" target="_blank">', '</a>' ); ?></p>
<table class="form-table">
<tr class="section_title">
<td colspan="2">
@ -673,8 +687,8 @@ class WC_Admin_Setup_Wizard {
</tr>
</table>
<p class="wc-setup-actions step">
<input type="submit" class="button-primary button button-large" value="<?php esc_attr_e( 'Continue', 'woocommerce' ); ?>" name="save_step" />
<a href="<?php echo esc_url( $this->get_next_step_link() ); ?>" class="button button-large"><?php _e( 'Skip this step', 'woocommerce' ); ?></a>
<input type="submit" class="button-primary button button-large button-next" value="<?php esc_attr_e( 'Continue', 'woocommerce' ); ?>" name="save_step" />
<a href="<?php echo esc_url( $this->get_next_step_link() ); ?>" class="button button-large button-next"><?php _e( 'Skip this step', 'woocommerce' ); ?></a>
<?php wp_nonce_field( 'wc-setup' ); ?>
</p>
</form>
@ -706,7 +720,7 @@ class WC_Admin_Setup_Wizard {
update_option( 'woocommerce_cod_settings', $cod_settings );
update_option( 'woocommerce_bacs_settings', $bacs_settings );
wp_redirect( $this->get_next_step_link() );
wp_redirect( esc_url_raw( $this->get_next_step_link() ) );
exit;
}

View File

@ -143,24 +143,7 @@ class WC_Admin_Status {
// Manual translation update messages
if ( isset( $_GET['translation_updated'] ) ) {
switch ( $_GET['translation_updated'] ) {
case 2 :
echo '<div class="error"><p>' . __( 'Failed to install/update the translation:', 'woocommerce' ) . ' ' . __( 'Seems you don\'t have permission to do this!', 'woocommerce' ) . '</p></div>';
break;
case 3 :
echo '<div class="error"><p>' . __( 'Failed to install/update the translation:', 'woocommerce' ) . ' ' . sprintf( __( 'An authentication error occurred while updating the translation. Please try again or configure your %sUpgrade Constants%s.', 'woocommerce' ), '<a href="http://codex.wordpress.org/Editing_wp-config.php#WordPress_Upgrade_Constants">', '</a>' ) . '</p></div>';
break;
case 4 :
echo '<div class="error"><p>' . __( 'Failed to install/update the translation:', 'woocommerce' ) . ' ' . __( 'Sorry but there is no translation available for your language =/', 'woocommerce' ) . '</p></div>';
break;
default :
// Force WordPress find for new updates and hide the WooCommerce translation update
set_site_transient( 'update_plugins', null );
echo '<div class="updated"><p>' . __( 'Translations installed/updated successfully!', 'woocommerce' ) . '</p></div>';
break;
}
WC_Language_Pack_Upgrader::language_update_messages();
}
// Display message if settings settings have been saved

View File

@ -140,7 +140,7 @@ class WC_Admin_Taxonomies {
var attachment = file_frame.state().get( 'selection' ).first().toJSON();
jQuery( '#product_cat_thumbnail_id' ).val( attachment.id );
jQuery( '#product_cat_thumbnail img' ).attr( 'src', attachment.sizes.thumbnail.url );
jQuery( '#product_cat_thumbnail' ).find( 'img' ).attr( 'src', attachment.sizes.thumbnail.url );
jQuery( '.remove_image_button' ).show();
});
@ -149,7 +149,7 @@ class WC_Admin_Taxonomies {
});
jQuery( document ).on( 'click', '.remove_image_button', function() {
jQuery( '#product_cat_thumbnail img' ).attr( 'src', '<?php echo esc_js( wc_placeholder_img_src() ); ?>' );
jQuery( '#product_cat_thumbnail' ).find( 'img' ).attr( 'src', '<?php echo esc_js( wc_placeholder_img_src() ); ?>' );
jQuery( '#product_cat_thumbnail_id' ).val( '' );
jQuery( '.remove_image_button' ).hide();
return false;
@ -231,7 +231,7 @@ class WC_Admin_Taxonomies {
var attachment = file_frame.state().get( 'selection' ).first().toJSON();
jQuery( '#product_cat_thumbnail_id' ).val( attachment.id );
jQuery( '#product_cat_thumbnail img' ).attr( 'src', attachment.sizes.thumbnail.url );
jQuery( '#product_cat_thumbnail' ).find( 'img' ).attr( 'src', attachment.sizes.thumbnail.url );
jQuery( '.remove_image_button' ).show();
});
@ -240,7 +240,7 @@ class WC_Admin_Taxonomies {
});
jQuery( document ).on( 'click', '.remove_image_button', function() {
jQuery( '#product_cat_thumbnail img' ).attr( 'src', '<?php echo esc_js( wc_placeholder_img_src() ); ?>' );
jQuery( '#product_cat_thumbnail' ).find( 'img' ).attr( 'src', '<?php echo esc_js( wc_placeholder_img_src() ); ?>' );
jQuery( '#product_cat_thumbnail_id' ).val( '' );
jQuery( '.remove_image_button' ).hide();
return false;

View File

@ -76,7 +76,7 @@ class WC_Tax_Rate_Importer extends WP_Importer {
gc_enable();
}
if ( function_exists( 'set_time_limit' ) && false === strpos( ini_get( 'disable_functions' ), 'set_time_limit' ) && ! ini_get( 'safe_mode' ) ) {
set_time_limit( 0 );
@set_time_limit( 0 );
}
@ob_flush();
@flush();

View File

@ -164,7 +164,7 @@ class WC_Meta_Box_Order_Data {
<input name="post_status" type="hidden" value="<?php echo esc_attr( $post->post_status ); ?>" />
<div id="order_data" class="panel">
<h2><?php echo esc_html( sprintf( __( '%s %s details', 'woocommerce' ), $order_type_object->labels->singular_name, $order->get_order_number() ) ); ?></h2>
<h2><?php echo esc_html( sprintf( _x( '%s #%s details', 'Order #123 details', 'woocommerce' ), $order_type_object->labels->singular_name, $order->get_order_number() ) ); ?></h2>
<p class="order_number"><?php
if ( $payment_method ) {
@ -222,7 +222,7 @@ class WC_Meta_Box_Order_Data {
if ( ! empty( $order->customer_user ) ) {
$user_id = absint( $order->customer_user );
$user = get_user_by( 'id', $user_id );
$user_string = esc_html( $user->display_name ) . ' (#' . absint( $user->ID ) . ' &ndash; ' . esc_html( $user->user_email );
$user_string = esc_html( $user->display_name ) . ' (#' . absint( $user->ID ) . ' &ndash; ' . esc_html( $user->user_email ) . ')';
}
?>
<input type="hidden" class="wc-customer-search" id="customer_user" name="customer_user" data-placeholder="<?php esc_attr_e( 'Guest', 'woocommerce' ); ?>" data-selected="<?php echo htmlspecialchars( $user_string ); ?>" value="<?php echo $user_id; ?>" data-allow_clear="true" />
@ -450,17 +450,16 @@ class WC_Meta_Box_Order_Data {
$date = strtotime( $_POST['order_date'] . ' ' . (int) $_POST['order_date_hour'] . ':' . (int) $_POST['order_date_minute'] . ':00' );
}
// Order data saved, now get it so we can manipulate status
$order = wc_get_order( $post_id );
// Order status
$order->update_status( $_POST['order_status'] );
// Finally, set the date
$date = date_i18n( 'Y-m-d H:i:s', $date );
$wpdb->query( $wpdb->prepare( "UPDATE $wpdb->posts SET post_date = %s, post_date_gmt = %s WHERE ID = %s", $date, get_gmt_from_date( $date ), $post_id ) );
// Order data saved, now get it so we can manipulate status
$order = wc_get_order( $post_id );
// Order status
$order->update_status( $_POST['order_status'], '', true );
wc_delete_shop_order_transients( $post_id );
}
}

View File

@ -44,9 +44,10 @@ class WC_Meta_Box_Order_Notes {
foreach( $notes as $note ) {
$note_classes = get_comment_meta( $note->comment_ID, 'is_customer_note', true ) ? array( 'customer-note', 'note' ) : array( 'note' );
$note_classes = apply_filters( 'woocommerce_order_note_class', $note_classes, $note );
?>
<li rel="<?php echo absint( $note->comment_ID ) ; ?>" class="<?php echo implode( ' ', $note_classes ); ?>">
<li rel="<?php echo absint( $note->comment_ID ) ; ?>" class="<?php echo esc_attr( implode( ' ', $note_classes ) ); ?>">
<div class="note_content">
<?php echo wpautop( wptexturize( wp_kses_post( $note->comment_content ) ) ); ?>
</div>

View File

@ -252,24 +252,35 @@ class WC_Meta_Box_Product_Data {
echo '<div class="options_group show_if_simple show_if_external show_if_variable">';
// Tax
woocommerce_wp_select( array( 'id' => '_tax_status', 'label' => __( 'Tax Status', 'woocommerce' ), 'options' => array(
'taxable' => __( 'Taxable', 'woocommerce' ),
'shipping' => __( 'Shipping only', 'woocommerce' ),
'none' => _x( 'None', 'Tax status', 'woocommerce' )
) ) );
woocommerce_wp_select( array(
'id' => '_tax_status',
'label' => __( 'Tax Status', 'woocommerce' ),
'options' => array(
'taxable' => __( 'Taxable', 'woocommerce' ),
'shipping' => __( 'Shipping only', 'woocommerce' ),
'none' => _x( 'None', 'Tax status', 'woocommerce' )
),
'desc_tip' => 'true',
'description' => __( 'Define whether or not the entire product is taxable, or just the cost of shipping it.', 'woocommerce' )
) );
$tax_classes = WC_Tax::get_tax_classes();
$classes_options = array();
$classes_options[''] = __( 'Standard', 'woocommerce' );
if ( ! empty( $tax_classes ) ) {
foreach ( $tax_classes as $class ) {
$classes_options[ sanitize_title( $class ) ] = esc_html( $class );
}
}
woocommerce_wp_select( array( 'id' => '_tax_class', 'label' => __( 'Tax Class', 'woocommerce' ), 'options' => $classes_options ) );
woocommerce_wp_select( array(
'id' => '_tax_class',
'label' => __( 'Tax Class', 'woocommerce' ),
'options' => $classes_options,
'desc_tip' => 'true',
'description' => __( 'Choose a tax class for this product. Tax classes are used to apply different tax rates specific to certain types of product.', 'woocommerce' )
) );
do_action( 'woocommerce_product_options_tax' );
@ -403,14 +414,31 @@ class WC_Meta_Box_Product_Data {
</div>
<div id="product_attributes" class="panel wc-metaboxes-wrapper">
<div class="toolbar toolbar-top">
<span class="expand-close">
<a href="#" class="expand_all"><?php _e( 'Expand', 'woocommerce' ); ?></a> / <a href="#" class="close_all"><?php _e( 'Close', 'woocommerce' ); ?></a>
</span>
<select name="attribute_taxonomy" class="attribute_taxonomy">
<option value=""><?php _e( 'Custom product attribute', 'woocommerce' ); ?></option>
<?php
global $wc_product_attributes;
// Array of defined attribute taxonomies
$attribute_taxonomies = wc_get_attribute_taxonomies();
if ( $attribute_taxonomies ) {
foreach ( $attribute_taxonomies as $tax ) {
$attribute_taxonomy_name = wc_attribute_taxonomy_name( $tax->attribute_name );
$label = $tax->attribute_label ? $tax->attribute_label : $tax->attribute_name;
echo '<option value="' . esc_attr( $attribute_taxonomy_name ) . '">' . esc_html( $label ) . '</option>';
}
}
?>
</select>
<button type="button" class="button add_attribute"><?php _e( 'Add', 'woocommerce' ); ?></button>
</div>
<div class="product_attributes wc-metaboxes">
<?php
global $wc_product_attributes;
// Array of defined attribute taxonomies
$attribute_taxonomies = wc_get_attribute_taxonomies();
// Product attributes - taxonomies and custom, ordered, with visibility and variation attributes set
$attributes = maybe_unserialize( get_post_meta( $thepostid, '_product_attributes', true ) );
@ -445,24 +473,12 @@ class WC_Meta_Box_Product_Data {
}
?>
</div>
<p class="toolbar">
<button type="button" class="button button-primary add_attribute"><?php _e( 'Add', 'woocommerce' ); ?></button>
<select name="attribute_taxonomy" class="attribute_taxonomy">
<option value=""><?php _e( 'Custom product attribute', 'woocommerce' ); ?></option>
<?php
if ( $attribute_taxonomies ) {
foreach ( $attribute_taxonomies as $tax ) {
$attribute_taxonomy_name = wc_attribute_taxonomy_name( $tax->attribute_name );
$label = $tax->attribute_label ? $tax->attribute_label : $tax->attribute_name;
echo '<option value="' . esc_attr( $attribute_taxonomy_name ) . '">' . esc_html( $label ) . '</option>';
}
}
?>
</select>
<button type="button" class="button save_attributes"><?php _e( 'Save attributes', 'woocommerce' ); ?></button>
</p>
<div class="toolbar">
<span class="expand-close">
<a href="#" class="expand_all"><?php _e( 'Expand', 'woocommerce' ); ?></a> / <a href="#" class="close_all"><?php _e( 'Close', 'woocommerce' ); ?></a>
</span>
<button type="button" class="button save_attributes button-primary"><?php _e( 'Save Attributes', 'woocommerce' ); ?></button>
</div>
<?php do_action( 'woocommerce_product_options_attributes' ); ?>
</div>
<div id="linked_product_data" class="panel woocommerce_options_panel">
@ -478,7 +494,7 @@ class WC_Meta_Box_Product_Data {
foreach ( $product_ids as $product_id ) {
$product = wc_get_product( $product_id );
if ( is_object( $product ) ) {
$json_ids[ $product_id ] = wp_kses_post( html_entity_decode( $product->get_formatted_name() ) );
$json_ids[ $product_id ] = wp_kses_post( html_entity_decode( $product->get_formatted_name(), ENT_QUOTES, get_bloginfo( 'charset' ) ) );
}
}
@ -495,7 +511,7 @@ class WC_Meta_Box_Product_Data {
foreach ( $product_ids as $product_id ) {
$product = wc_get_product( $product_id );
if ( is_object( $product ) ) {
$json_ids[ $product_id ] = wp_kses_post( html_entity_decode( $product->get_formatted_name() ) );
$json_ids[ $product_id ] = wp_kses_post( html_entity_decode( $product->get_formatted_name(), ENT_QUOTES, get_bloginfo( 'charset' ) ) );
}
}
@ -514,7 +530,7 @@ class WC_Meta_Box_Product_Data {
if ( $parent_id ) {
$parent = wc_get_product( $parent_id );
if ( is_object( $parent ) ) {
$parent_title = wp_kses_post( html_entity_decode( $parent->get_formatted_name() ) );
$parent_title = wp_kses_post( html_entity_decode( $parent->get_formatted_name(), ENT_QUOTES, get_bloginfo( 'charset' ) ) );
}
echo esc_attr( $parent_title );
@ -589,25 +605,26 @@ class WC_Meta_Box_Product_Data {
if ( $attributes ) {
foreach ( $attributes as $attribute ) {
if ( isset( $attribute['is_variation'] ) ) {
if ( ! empty( $attribute['is_variation'] ) ) {
$variation_attribute_found = true;
break;
}
}
}
$variations_count = absint( $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(ID) FROM $wpdb->posts WHERE post_parent = %d AND post_type = 'product_variation'", $post->ID ) ) );
$variations_per_page = absint( apply_filters( 'woocommerce_admin_meta_boxes_variations_per_page', 10 ) );
$variations_count = absint( $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(ID) FROM $wpdb->posts WHERE post_parent = %d AND post_type = 'product_variation' AND post_status IN ('publish', 'private')", $post->ID ) ) );
$variations_per_page = absint( apply_filters( 'woocommerce_admin_meta_boxes_variations_per_page', 15 ) );
$variations_total_pages = ceil( $variations_count / $variations_per_page );
?>
<div id="variable_product_options" class="panel wc-metaboxes-wrapper"><div id="variable_product_options_inner">
<?php if ( ! $variation_attribute_found ) : ?>
<div id="message" class="inline woocommerce-message">
<p><?php _e( 'Before adding variations, add and save some attributes on the <strong>Attributes</strong> tab.', 'woocommerce' ); ?></p>
<p class="submit"><a class="button-primary" href="<?php echo esc_url( apply_filters( 'woocommerce_docs_url', 'http://docs.woothemes.com/document/variable-product/', 'product-variations' ) ); ?>" target="_blank"><?php _e( 'Learn more', 'woocommerce' ); ?></a></p>
<div id="message" class="inline notice woocommerce-message">
<p><?php _e( 'Before you can add a variation you need to add some variation attributes on the <strong>Attributes</strong> tab.', 'woocommerce' ); ?></p>
<p>
<a class="button-primary" href="<?php echo esc_url( apply_filters( 'woocommerce_docs_url', 'http://docs.woothemes.com/document/variable-product/', 'product-variations' ) ); ?>" target="_blank"><?php _e( 'Learn more', 'woocommerce' ); ?></a>
</p>
</div>
<?php else : ?>
@ -658,8 +675,8 @@ class WC_Meta_Box_Product_Data {
<div class="toolbar toolbar-top">
<select id="field_to_edit" class="variation_actions">
<option value="add_variation"><?php _e( 'Add variation', 'woocommerce' ); ?></option>
<option value="link_all_variations"><?php _e( 'Create variations from all attributes', 'woocommerce' ); ?></option>
<option data-global="true" value="add_variation"><?php _e( 'Add variation', 'woocommerce' ); ?></option>
<option data-global="true" value="link_all_variations"><?php _e( 'Create variations from all attributes', 'woocommerce' ); ?></option>
<option value="delete_all"><?php _e( 'Delete all variations', 'woocommerce' ); ?></option>
<optgroup label="<?php esc_attr_e( 'Status', 'woocommerce' ); ?>">
<option value="toggle_enabled"><?php _e( 'Toggle &quot;Enabled&quot;', 'woocommerce' ); ?></option>
@ -717,7 +734,7 @@ class WC_Meta_Box_Product_Data {
<div class="clear"></div>
</div>
<div class="woocommerce_variations wc-metaboxes" data-attributes="<?php
<div class="woocommerce_variations wc-metaboxes" data-attributes="<?php
// esc_attr does not double encode - htmlspecialchars does
echo htmlspecialchars( json_encode( $attributes ) );
?>" data-total="<?php echo $variations_count; ?>" data-total_pages="<?php echo $variations_total_pages; ?>" data-page="1" data-edited="false">
@ -939,8 +956,9 @@ class WC_Meta_Box_Product_Data {
} elseif ( isset( $attribute_values[ $i ] ) ) {
// Text based, separate by pipe
$values = implode( ' ' . WC_DELIMITER . ' ', array_map( 'wc_clean', wc_get_text_attributes( $attribute_values[ $i ] ) ) );
// Text based, possibly separated by pipes (WC_DELIMITER). Preserve line breaks in non-variation attributes.
$values = $is_variation ? wc_clean( $attribute_values[ $i ] ) : implode( "\n", array_map( 'wc_clean', explode( "\n", $attribute_values[ $i ] ) ) );
$values = implode( ' ' . WC_DELIMITER . ' ', wc_get_text_attributes( $values ) );
// Custom attribute - Add attribute to array and set the values
$attributes[ sanitize_title( $attribute_names[ $i ] ) ] = array(
@ -1107,7 +1125,7 @@ class WC_Meta_Box_Product_Data {
update_post_meta( $post_id, '_stock', '' );
}
} else {
} elseif ( 'variable' !== $product_type ) {
wc_update_product_stock_status( $post_id, wc_clean( $_POST['_stock_status'] ) );
}
@ -1136,7 +1154,7 @@ class WC_Meta_Box_Product_Data {
if ( isset( $_POST['_wc_file_urls'] ) ) {
$file_names = isset( $_POST['_wc_file_names'] ) ? $_POST['_wc_file_names'] : array();
$file_urls = isset( $_POST['_wc_file_urls'] ) ? array_map( 'trim', $_POST['_wc_file_urls'] ) : array();
$file_urls = isset( $_POST['_wc_file_urls'] ) ? wp_unslash( array_map( 'trim', $_POST['_wc_file_urls'] ) ) : array();
$file_url_size = sizeof( $file_urls );
$allowed_file_types = apply_filters( 'woocommerce_downloadable_file_allowed_mime_types', get_allowed_mime_types() );
@ -1218,6 +1236,7 @@ class WC_Meta_Box_Product_Data {
if ( 'variable' == $product_type ) {
// Update parent if variable so price sorting works and stays in sync with the cheapest child
WC_Product_Variable::sync( $post_id );
WC_Product_Variable::sync_stock_status( $post_id );
}
// Update version after saving
@ -1308,6 +1327,8 @@ class WC_Meta_Box_Product_Data {
$wpdb->update( $wpdb->posts, array( 'post_status' => $post_status, 'post_title' => $variation_post_title, 'menu_order' => $variable_menu_order[ $i ] ), array( 'ID' => $variation_id ) );
clean_post_cache( $variation_id );
do_action( 'woocommerce_update_product_variation', $variation_id );
}

View File

@ -32,7 +32,7 @@ if ( ! defined( 'ABSPATH' ) ) {
echo '<br/>' . wc_get_formatted_variation( $_product->variation_data, true );
}
?>"><?php echo $_product->get_image( 'shop_thumbnail', array( 'title' => '' ) ); ?></a>
?>"><?php echo apply_filters( 'woocommerce_admin_order_item_thumbnail', $_product->get_image( 'shop_thumbnail', array( 'title' => '' ) ), $item_id, $item ); ?></a>
<?php else : ?>
<?php echo wc_placeholder_img( 'shop_thumbnail' ); ?>
<?php endif; ?>

View File

@ -183,13 +183,7 @@ if ( wc_tax_enabled() ) {
<tr>
<td class="label"><?php _e( 'Order Total', 'woocommerce' ); ?>:</td>
<td class="total">
<div class="view"><?php
if ( $order->get_total_refunded() > 0 ) {
echo '<del>' . strip_tags( $order->get_formatted_order_total() ) . '</del> <ins>' . wc_price( $order->get_total() - $order->get_total_refunded(), array( 'currency' => $order->get_order_currency() ) ) . '</ins>';
} else {
echo esc_html( strip_tags( $order->get_formatted_order_total() ) );
}
?></div>
<div class="view"><?php echo $order->get_formatted_order_total(); ?></div>
<div class="edit" style="display: none;">
<input type="text" class="wc_input_price" id="_order_total" name="_order_total" placeholder="<?php echo wc_format_localized_price( 0 ); ?>" value="<?php echo ( isset( $data['_order_total'][0] ) ) ? esc_attr( wc_format_localized_price( $data['_order_total'][0] ) ) : ''; ?>" />
<div class="clear"></div>
@ -306,7 +300,7 @@ if ( wc_tax_enabled() ) {
</div>
<?php endif; ?>
<script type="text/template" id="wc-modal-add-products">
<script type="text/template" id="tmpl-wc-modal-add-products">
<div class="wc-backbone-modal">
<div class="wc-backbone-modal-content">
<section class="wc-backbone-modal-main" role="main">
@ -332,7 +326,7 @@ if ( wc_tax_enabled() ) {
<div class="wc-backbone-modal-backdrop modal-close"></div>
</script>
<script type="text/template" id="wc-modal-add-tax">
<script type="text/template" id="tmpl-wc-modal-add-tax">
<div class="wc-backbone-modal">
<div class="wc-backbone-modal-content">
<section class="wc-backbone-modal-main" role="main">

View File

@ -16,13 +16,13 @@ extract( $variation_data );
<h3>
<a href="#" class="remove_variation delete" rel="<?php echo esc_attr( $variation_id ); ?>"><?php _e( 'Remove', 'woocommerce' ); ?></a>
<div class="handlediv" title="<?php esc_attr_e( 'Click to toggle', 'woocommerce' ); ?>"></div>
<div class="tips sort" data-tip="<?php esc_attr_e( 'Drag and drop, or click to set menu order manually', 'woocommerce' ); ?>"></div>
<div class="tips sort" data-tip="<?php esc_attr_e( 'Drag and drop, or click to set admin variation order', 'woocommerce' ); ?>"></div>
<strong>#<?php echo esc_html( $variation_id ); ?>: </strong>
<?php
foreach ( $parent_data['attributes'] as $attribute ) {
// Only deal with attributes that are variations
if ( ! $attribute['is_variation'] ) {
if ( ! $attribute['is_variation'] || 'false' === $attribute['is_variation'] ) {
continue;
}
@ -56,7 +56,7 @@ extract( $variation_data );
}
?>
<input type="hidden" name="variable_post_id[<?php echo $loop; ?>]" value="<?php echo esc_attr( $variation_id ); ?>" />
<input type="hidden" class="variation_menu_order" name="variation_menu_order[<?php echo $loop; ?>]" value="<?php echo absint( $menu_order ); ?>" />
<input type="hidden" class="variation_menu_order" name="variation_menu_order[<?php echo $loop; ?>]" value="<?php echo isset( $menu_order ) ? absint( $menu_order ) : 0; ?>" />
</h3>
<div class="woocommerce_variable_attributes wc-metabox-content" style="display: none;">
<div class="data">
@ -108,6 +108,19 @@ extract( $variation_data );
<input type="text" class="sale_price_dates_to" name="variable_sale_price_dates_to[<?php echo $loop; ?>]" value="<?php echo ! empty( $_sale_price_dates_to ) ? date_i18n( 'Y-m-d', $_sale_price_dates_to ) : ''; ?>" placeholder="<?php echo esc_attr_x('To&hellip;', 'placeholder', 'woocommerce') ?> YYYY-MM-DD" maxlength="10" pattern="[0-9]{4}-(0[1-9]|1[012])-(0[1-9]|1[0-9]|2[0-9]|3[01])" />
</p>
</div>
<?php
/**
* woocommerce_variation_options_pricing action
*
* @since 2.5.0
*
* @param int $loop
* @param array $variation_data
* @param WP_Post $variation
*/
do_action( 'woocommerce_variation_options_pricing', $loop, $variation_data, $variation );
?>
</div>
<?php if ( 'yes' == get_option( 'woocommerce_manage_stock' ) ) : ?>
@ -126,6 +139,19 @@ extract( $variation_data );
?>
</select>
</p>
<?php
/**
* woocommerce_product_options_inventory action
*
* @since 2.5.0
*
* @param int $loop
* @param array $variation_data
* @param WP_Post $variation
*/
do_action( 'woocommerce_product_options_inventory', $loop, $variation_data, $variation );
?>
</div>
<?php endif; ?>
@ -162,6 +188,19 @@ extract( $variation_data );
<?php else : ?>
<p>&nbsp;</p>
<?php endif; ?>
<?php
/**
* woocommerce_product_options_dimensions action
*
* @since 2.5.0
*
* @param int $loop
* @param array $variation_data
* @param WP_Post $variation
*/
do_action( 'woocommerce_product_options_dimensions', $loop, $variation_data, $variation );
?>
</div>
<?php endif; ?>
<div>
@ -189,6 +228,19 @@ extract( $variation_data );
echo '<option value="' . esc_attr( $key ) . '" ' . selected( $key === $_tax_class, true, false ) . '>' . esc_html( $value ) . '</option>';
?></select>
</p>
<?php
/**
* woocommerce_product_options_tax action
*
* @since 2.5.0
*
* @param int $loop
* @param array $variation_data
* @param WP_Post $variation
*/
do_action( 'woocommerce_product_options_tax', $loop, $variation_data, $variation );
?>
<?php endif; ?>
<p class="form-row form-row-full">
@ -249,6 +301,19 @@ extract( $variation_data );
<label><?php _e( 'Download Expiry:', 'woocommerce' ); ?> <a class="tips" data-tip="<?php esc_attr_e( 'Enter the number of days before a download link expires, or leave blank.', 'woocommerce' ); ?>" href="#">[?]</a></label>
<input type="number" size="5" name="variable_download_expiry[<?php echo $loop; ?>]" value="<?php if ( isset( $_download_expiry ) ) echo esc_attr( $_download_expiry ); ?>" placeholder="<?php esc_attr_e( 'Unlimited', 'woocommerce' ); ?>" step="1" min="0" />
</p>
<?php
/**
* woocommerce_product_options_download action
*
* @since 2.5.0
*
* @param int $loop
* @param array $variation_data
* @param WP_Post $variation
*/
do_action( 'woocommerce_product_options_download', $loop, $variation_data, $variation );
?>
</div>
<?php do_action( 'woocommerce_product_after_variable_attributes', $loop, $variation_data, $variation ); ?>
</div>

View File

@ -350,13 +350,13 @@ class WC_Report_Sales_By_Date extends WC_Admin_Report {
'title' => sprintf( __( '%s gross sales in this period', 'woocommerce' ), '<strong>' . wc_price( $data->total_sales ) . '</strong>' ),
'placeholder' => __( 'This is the sum of the order totals after any refunds and including shipping and taxes.', 'woocommerce' ),
'color' => $this->chart_colours['sales_amount'],
'highlight_series' => 6
'highlight_series' => 5
);
$legend[] = array(
'title' => sprintf( __( '%s net sales in this period', 'woocommerce' ), '<strong>' . wc_price( $data->net_sales ) . '</strong>' ),
'placeholder' => __( 'This is the sum of the order totals after any refunds and excluding shipping and taxes.', 'woocommerce' ),
'color' => $this->chart_colours['net_sales_amount'],
'highlight_series' => 7
'highlight_series' => 6
);
if ( $data->average_sales > 0 ) {
$legend[] = array(
@ -377,14 +377,14 @@ class WC_Report_Sales_By_Date extends WC_Admin_Report {
'highlight_series' => 0
);
$legend[] = array(
'title' => sprintf( _n( '%s refunded %d order', '%s refunded %d orders', $this->report_data->total_refunded_orders, 'woocommerce' ), '<strong>' . wc_price( $data->total_refunds ) . '</strong>', $this->report_data->total_refunded_orders ) . ' (' . sprintf( _n( '%d item', '%d items', $this->report_data->refunded_order_items, 'woocommerce' ), $this->report_data->refunded_order_items ) . ')',
'title' => sprintf( _nx( '%s refunded %d order', '%s refunded %d orders', $this->report_data->total_refunded_orders, '%s = amount of the refunds, %d = number of refunded orders.', 'woocommerce' ), '<strong>' . wc_price( $data->total_refunds ) . '</strong>', $this->report_data->total_refunded_orders ) . ' (' . sprintf( _n( '%d item', '%d items', $this->report_data->refunded_order_items, 'woocommerce' ), $this->report_data->refunded_order_items ) . ')',
'color' => $this->chart_colours['refund_amount'],
'highlight_series' => 4
'highlight_series' => 7
);
$legend[] = array(
'title' => sprintf( __( '%s charged for shipping', 'woocommerce' ), '<strong>' . wc_price( $data->total_shipping ) . '</strong>' ),
'color' => $this->chart_colours['shipping_amount'],
'highlight_series' => 5
'highlight_series' => 4
);
$legend[] = array(
'title' => sprintf( __( '%s worth of coupons used', 'woocommerce' ), '<strong>' . wc_price( $data->total_coupons ) . '</strong>' ),

View File

@ -112,8 +112,8 @@ class WC_Settings_General extends WC_Settings_Page {
'desc' => '',
'id' => 'woocommerce_demo_store_notice',
'default' => __( 'This is a demo store for testing purposes &mdash; no orders shall be fulfilled.', 'woocommerce' ),
'type' => 'text',
'css' => 'min-width:300px;',
'type' => 'textarea',
'css' => 'width:350px; height: 65px;',
'autoload' => false
),

View File

@ -289,12 +289,14 @@ class WC_Settings_Products extends WC_Settings_Page {
),
array(
'title' => __( 'Notification Recipient', 'woocommerce' ),
'desc' => '',
'title' => __( 'Notification Recipient(s)', 'woocommerce' ),
'desc' => __( 'Enter recipients (comma separated) that will receive this notification.', 'woocommerce' ),
'id' => 'woocommerce_stock_email_recipient',
'type' => 'email',
'type' => 'text',
'default' => get_option( 'admin_email' ),
'autoload' => false
'css' => 'width: 250px;',
'autoload' => false,
'desc_tip' => true
),
array(

View File

@ -158,7 +158,7 @@ if ( ! defined( 'ABSPATH' ) ) {
__( 'Tax Class', 'woocommerce' ),
) ) ); ?>\n";
jQuery('#rates tr:visible').each(function() {
jQuery('#rates').find('tr:visible').each(function() {
var row = '';
jQuery(this).find('td:not(.sort) input').each(function() {

View File

@ -167,10 +167,10 @@ if ( ! defined( 'ABSPATH' ) ) {
<script type="text/javascript">
jQuery( function ( $ ) {
$( '#webhook-options #webhook_topic' ).on( 'change', function() {
$( '#webhook-options' ).find( '#webhook_topic' ).on( 'change', function() {
var current = $( this ).val(),
action_event_field = $( '#webhook-options #webhook-action-event-wrap' ),
custom_topic_field = $( '#webhook-options #webhook-custom-topic-wrap' );
action_event_field = $( '#webhook-options' ).find( '#webhook-action-event-wrap' ),
custom_topic_field = $( '#webhook-options' ).find( '#webhook-custom-topic-wrap' );
action_event_field.hide();
custom_topic_field.hide();

View File

@ -322,7 +322,8 @@ if ( ! defined( 'ABSPATH' ) ) {
$active_plugins = (array) get_option( 'active_plugins', array() );
if ( is_multisite() ) {
$active_plugins = array_merge( $active_plugins, get_site_option( 'active_sitewide_plugins', array() ) );
$network_activated_plugins = array_keys( get_site_option( 'active_sitewide_plugins', array() ) );
$active_plugins = array_merge( $active_plugins, $network_activated_plugins );
}
foreach ( $active_plugins as $plugin ) {
@ -776,7 +777,7 @@ if ( ! defined( 'ABSPATH' ) ) {
try {
jQuery( '#debug-report' ).slideDown();
jQuery( '#debug-report textarea' ).val( report ).focus().select();
jQuery( '#debug-report' ).find( 'textarea' ).val( report ).focus().select();
jQuery( this ).fadeOut();
return false;
} catch( e ){
@ -797,7 +798,7 @@ if ( ! defined( 'ABSPATH' ) ) {
$( document.body ).on( 'copy', '#copy-for-support', function( e ) {
e.clipboardData.clearData();
e.clipboardData.setData( 'text/plain', $( '#debug-report textarea' ).val() );
e.clipboardData.setData( 'text/plain', $( '#debug-report' ).find( 'textarea' ).val() );
e.preventDefault();
});

View File

@ -65,49 +65,51 @@ if ( ! defined( 'ABSPATH' ) ) {
</label>
</div>
<label>
<span class="title"><?php _e( 'Tax Status', 'woocommerce' ); ?></span>
<span class="input-text-wrap">
<select class="tax_status" name="_tax_status">
<?php
$options = array(
'' => __( '— No Change —', 'woocommerce' ),
'taxable' => __( 'Taxable', 'woocommerce' ),
'shipping' => __( 'Shipping only', 'woocommerce' ),
'none' => _x( 'None', 'Tax status', 'woocommerce' )
);
foreach ($options as $key => $value) {
echo '<option value="' . esc_attr( $key ) . '">' . $value . '</option>';
}
?>
</select>
</span>
</label>
<label>
<span class="title"><?php _e( 'Tax Class', 'woocommerce' ); ?></span>
<span class="input-text-wrap">
<select class="tax_class" name="_tax_class">
<?php
$options = array(
'' => __( '— No Change —', 'woocommerce' ),
'standard' => __( 'Standard', 'woocommerce' )
);
$tax_classes = WC_Tax::get_tax_classes();
if ( $tax_classes )
foreach ( $tax_classes as $class ) {
$options[ sanitize_title( $class ) ] = esc_html( $class );
<?php if ( wc_tax_enabled() ) : ?>
<label>
<span class="title"><?php _e( 'Tax Status', 'woocommerce' ); ?></span>
<span class="input-text-wrap">
<select class="tax_status" name="_tax_status">
<?php
$options = array(
'' => __( '— No Change —', 'woocommerce' ),
'taxable' => __( 'Taxable', 'woocommerce' ),
'shipping' => __( 'Shipping only', 'woocommerce' ),
'none' => _x( 'None', 'Tax status', 'woocommerce' )
);
foreach ($options as $key => $value) {
echo '<option value="' . esc_attr( $key ) . '">' . $value . '</option>';
}
?>
</select>
</span>
</label>
foreach ( $options as $key => $value ) {
echo '<option value="' . esc_attr( $key ) . '">' . $value . '</option>';
}
?>
</select>
</span>
</label>
<label>
<span class="title"><?php _e( 'Tax Class', 'woocommerce' ); ?></span>
<span class="input-text-wrap">
<select class="tax_class" name="_tax_class">
<?php
$options = array(
'' => __( '— No Change —', 'woocommerce' ),
'standard' => __( 'Standard', 'woocommerce' )
);
$tax_classes = WC_Tax::get_tax_classes();
if ( $tax_classes )
foreach ( $tax_classes as $class ) {
$options[ sanitize_title( $class ) ] = esc_html( $class );
}
foreach ( $options as $key => $value ) {
echo '<option value="' . esc_attr( $key ) . '">' . $value . '</option>';
}
?>
</select>
</span>
</label>
<?php endif; ?>
<?php if ( wc_product_weight_enabled() ) : ?>
<div class="inline-edit-group">

View File

@ -45,48 +45,50 @@ if ( ! defined( 'ABSPATH' ) ) {
<br class="clear" />
</div>
<label class="alignleft">
<span class="title"><?php _e( 'Tax Status', 'woocommerce' ); ?></span>
<span class="input-text-wrap">
<select class="tax_status" name="_tax_status">
<?php
$options = array(
'taxable' => __( 'Taxable', 'woocommerce' ),
'shipping' => __( 'Shipping only', 'woocommerce' ),
'none' => _x( 'None', 'Tax status', 'woocommerce' )
);
foreach ( $options as $key => $value ) {
echo '<option value="' . esc_attr( $key ) . '">' . $value . '</option>';
}
?>
</select>
</span>
</label>
<br class="clear" />
<label class="alignleft">
<span class="title"><?php _e( 'Tax Class', 'woocommerce' ); ?></span>
<span class="input-text-wrap">
<select class="tax_class" name="_tax_class">
<?php
$options = array(
'' => __( 'Standard', 'woocommerce' )
);
$tax_classes = WC_Tax::get_tax_classes();
if ( $tax_classes )
foreach ( $tax_classes as $class ) {
$options[ sanitize_title( $class ) ] = esc_html( $class );
<?php if ( wc_tax_enabled() ) : ?>
<label class="alignleft">
<span class="title"><?php _e( 'Tax Status', 'woocommerce' ); ?></span>
<span class="input-text-wrap">
<select class="tax_status" name="_tax_status">
<?php
$options = array(
'taxable' => __( 'Taxable', 'woocommerce' ),
'shipping' => __( 'Shipping only', 'woocommerce' ),
'none' => _x( 'None', 'Tax status', 'woocommerce' )
);
foreach ( $options as $key => $value ) {
echo '<option value="' . esc_attr( $key ) . '">' . $value . '</option>';
}
?>
</select>
</span>
</label>
<br class="clear" />
<label class="alignleft">
<span class="title"><?php _e( 'Tax Class', 'woocommerce' ); ?></span>
<span class="input-text-wrap">
<select class="tax_class" name="_tax_class">
<?php
$options = array(
'' => __( 'Standard', 'woocommerce' )
);
foreach ( $options as $key => $value ) {
echo '<option value="' . esc_attr( $key ) . '">' . $value . '</option>';
}
?>
</select>
</span>
</label>
<br class="clear" />
$tax_classes = WC_Tax::get_tax_classes();
if ( $tax_classes )
foreach ( $tax_classes as $class ) {
$options[ sanitize_title( $class ) ] = esc_html( $class );
}
foreach ( $options as $key => $value ) {
echo '<option value="' . esc_attr( $key ) . '">' . $value . '</option>';
}
?>
</select>
</span>
</label>
<br class="clear" />
<?php endif; ?>
<?php if ( wc_product_weight_enabled() || wc_product_dimensions_enabled() ) : ?>
<div class="dimension_fields">

View File

@ -61,40 +61,50 @@ function wc_create_page( $slug, $option = '', $page_title = '', $page_content =
global $wpdb;
$option_value = get_option( $option );
$page_found_trash = false;
if ( $option_value > 0 && ( $page_object = get_post( $option_value ) ) ) {
if ( 'trash' != $page_object->post_status ) {
return -1;
} else {
$page_found_trash = true;
if ( $option_value > 0 ) {
$page_object = get_post( $option_value );
if ( 'page' === $page_object->post_type && ! in_array( $page_object->post_status, array( 'pending', 'trash', 'future', 'auto-draft' ) ) ) {
// Valid page is already in place
return $page_object->ID;
}
}
if ( strlen( $page_content ) > 0 ) {
// Search for an existing page with the specified page content (typically a shortcode)
$page_found = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_type='page' AND post_content LIKE %s LIMIT 1;", "%{$page_content}%" ) );
$valid_page_found = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_type='page' AND post_status NOT IN ( 'pending', 'trash', 'future', 'auto-draft' ) AND post_content LIKE %s LIMIT 1;", "%{$page_content}%" ) );
} else {
// Search for an existing page with the specified page slug
$page_found = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_type='page' AND post_name = %s LIMIT 1;", $slug ) );
$valid_page_found = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_type='page' AND post_status NOT IN ( 'pending', 'trash', 'future', 'auto-draft' ) AND post_name = %s LIMIT 1;", $slug ) );
}
$page_found = apply_filters( 'woocommerce_create_page_id', $page_found, $slug, $page_content );
$valid_page_found = apply_filters( 'woocommerce_create_page_id', $valid_page_found, $slug, $page_content );
if ( $page_found && ! $page_found_trash ) {
if ( ! $option_value ) {
update_option( $option, $page_found );
if ( $valid_page_found ) {
if ( $option ) {
update_option( $option, $valid_page_found );
}
return $page_found;
}
elseif ( ! $page_found && $page_found_trash ) {
// Page was found in trash but it did not have the correct shortcode (so just recreate it)
$page_found_trash = false;
return $valid_page_found;
}
if ( ! $page_found_trash ) {
// Search for a matching valid trashed page
if ( strlen( $page_content ) > 0 ) {
// Search for an existing page with the specified page content (typically a shortcode)
$trashed_page_found = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_type='page' AND post_status = 'trash' AND post_content LIKE %s LIMIT 1;", "%{$page_content}%" ) );
} else {
// Search for an existing page with the specified page slug
$trashed_page_found = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_type='page' AND post_status = 'trash' AND post_name = %s LIMIT 1;", $slug ) );
}
if ( $trashed_page_found ) {
$page_id = $trashed_page_found;
$page_data = array(
'ID' => $page_id,
'post_status' => 'publish',
);
wp_update_post( $page_data );
} else {
$page_data = array(
'post_status' => 'publish',
'post_type' => 'page',
@ -105,13 +115,7 @@ function wc_create_page( $slug, $option = '', $page_title = '', $page_content =
'post_parent' => $post_parent,
'comment_status' => 'closed'
);
$page_id = wp_insert_post( $page_data );
} else {
$page_data = array(
'ID' => $page_found,
'post_status' => 'publish',
);
$page_id = wp_update_post( $page_data );
$page_id = wp_insert_post( $page_data );
}
if ( $option ) {
@ -249,8 +253,7 @@ function wc_save_order_items( $order_id, $items ) {
// Delele blank item meta entries
if ( $meta_key === '' && $meta_value === '' ) {
$wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->prefix}woocommerce_order_itemmeta WHERE meta_id = %d", $id ) );
}
else {
} else {
$wpdb->update(
$wpdb->prefix . 'woocommerce_order_itemmeta',
@ -273,7 +276,7 @@ function wc_save_order_items( $order_id, $items ) {
foreach ( $items['shipping_method_id'] as $item_id ) {
$item_id = absint( $item_id );
$method_id = isset( $items['shipping_method'][ $item_id ] ) ? wc_clean( $items['shipping_method'][ $item_id ] ) : '';
$method_title = isset( $items['shipping_method_title'][ $item_id ] ) ? wc_clean( $items['shipping_method_title'][ $item_id ] ) : '';
$method_title = isset( $items['shipping_method_title'][ $item_id ] ) ? wc_clean( wp_unslash( $items['shipping_method_title'][ $item_id ] ) ) : '';
$cost = isset( $items['shipping_cost'][ $item_id ] ) ? wc_format_decimal( $items['shipping_cost'][ $item_id ] ) : '';
$ship_taxes = isset( $items['shipping_taxes'][ $item_id ] ) ? array_map( 'wc_format_decimal', $items['shipping_taxes'][ $item_id ] ) : array();

View File

@ -241,7 +241,7 @@ class WC_API_Customers extends WC_API_Resource {
$query = $this->query_customers( $filter );
return array( 'count' => count( $query->get_results() ) );
return array( 'count' => $query->get_total() );
} catch ( WC_API_Exception $e ) {
return new WP_Error( $e->getErrorCode(), $e->getMessage(), array( 'status' => $e->getCode() ) );
}
@ -461,37 +461,20 @@ class WC_API_Customers extends WC_API_Resource {
* @since 2.1
* @param int $id the customer ID
* @param string $fields fields to include in response
* @param array $filter filters
* @return array
*/
public function get_customer_orders( $id, $fields = null ) {
global $wpdb;
public function get_customer_orders( $id, $fields = null, $filter = array() ) {
$id = $this->validate_request( $id, 'customer', 'read' );
if ( is_wp_error( $id ) ) {
return $id;
}
$order_ids = $wpdb->get_col( $wpdb->prepare( "SELECT id
FROM $wpdb->posts AS posts
LEFT JOIN {$wpdb->postmeta} AS meta on posts.ID = meta.post_id
WHERE meta.meta_key = '_customer_user'
AND meta.meta_value = '%s'
AND posts.post_type = 'shop_order'
AND posts.post_status IN ( '" . implode( "','", array_keys( wc_get_order_statuses() ) ) . "' )
", $id ) );
$filter['customer_id'] = $id;
$orders = WC()->api->WC_API_Orders->get_orders( $fields, $filter, null, -1 );
if ( empty( $order_ids ) ) {
return array( 'orders' => array() );
}
$orders = array();
foreach ( $order_ids as $order_id ) {
$orders[] = current( WC()->api->WC_API_Orders->get_order( $order_id, $fields ) );
}
return array( 'orders' => apply_filters( 'woocommerce_api_customer_orders_response', $orders, $id, $fields, $order_ids, $this->server ) );
return $orders;
}
/**
@ -548,6 +531,11 @@ class WC_API_Customers extends WC_API_Resource {
// Custom Role
if ( ! empty( $args['role'] ) ) {
$query_args['role'] = $args['role'];
// Show users on all roles
if ( 'all' === $query_args['role'] ) {
unset( $query_args['role'] );
}
}
// Search

View File

@ -232,7 +232,7 @@ class WC_API_Orders extends WC_API_Resource {
foreach ( $meta->get_formatted( $hideprefix ) as $meta_key => $formatted_meta ) {
$item_meta[] = array(
'key' => $meta_key,
'key' => $formatted_meta['key'],
'label' => $formatted_meta['label'],
'value' => $formatted_meta['value'],
);
@ -470,12 +470,6 @@ class WC_API_Orders extends WC_API_Resource {
update_post_meta( $order->id, '_order_currency', $data['currency'] );
}
// set order number
if ( isset( $data['order_number'] ) ) {
update_post_meta( $order->id, '_order_number', $data['order_number'] );
}
// set order meta
if ( isset( $data['order_meta'] ) && is_array( $data['order_meta'] ) ) {
$this->set_order_meta( $order->id, $data['order_meta'] );
@ -640,12 +634,6 @@ class WC_API_Orders extends WC_API_Resource {
update_post_meta( $order->id, '_order_currency', $data['currency'] );
}
// set order number
if ( isset( $data['order_number'] ) ) {
update_post_meta( $order->id, '_order_number', $data['order_number'] );
}
// if items have changed, recalculate order totals
if ( $update_totals ) {
$order->calculate_totals();
@ -711,13 +699,21 @@ class WC_API_Orders extends WC_API_Resource {
// add status argument
if ( ! empty( $args['status'] ) ) {
$statuses = 'wc-' . str_replace( ',', ',wc-', $args['status'] );
$statuses = explode( ',', $statuses );
$query_args['post_status'] = $statuses;
unset( $args['status'] );
}
if ( ! empty( $args['customer_id'] ) ) {
$query_args['meta_query'] = array(
array(
'key' => '_customer_user',
'value' => absint( $args['customer_id'] ),
'compare' => '='
)
);
}
$query_args = $this->merge_query_args( $query_args, $args );
@ -1555,18 +1551,19 @@ class WC_API_Orders extends WC_API_Resource {
}
$line_items[] = array(
'id' => $item_id,
'subtotal' => wc_format_decimal( $order->get_line_subtotal( $item ), 2 ),
'subtotal_tax' => wc_format_decimal( $item['line_subtotal_tax'], 2 ),
'total' => wc_format_decimal( $order->get_line_total( $item ), 2 ),
'total_tax' => wc_format_decimal( $order->get_line_tax( $item ), 2 ),
'price' => wc_format_decimal( $order->get_item_total( $item ), 2 ),
'quantity' => (int) $item['qty'],
'tax_class' => ( ! empty( $item['tax_class'] ) ) ? $item['tax_class'] : null,
'name' => $item['name'],
'product_id' => ( isset( $product->variation_id ) ) ? $product->variation_id : $product->id,
'sku' => is_object( $product ) ? $product->get_sku() : null,
'meta' => $item_meta,
'id' => $item_id,
'subtotal' => wc_format_decimal( $order->get_line_subtotal( $item ), 2 ),
'subtotal_tax' => wc_format_decimal( $item['line_subtotal_tax'], 2 ),
'total' => wc_format_decimal( $order->get_line_total( $item ), 2 ),
'total_tax' => wc_format_decimal( $order->get_line_tax( $item ), 2 ),
'price' => wc_format_decimal( $order->get_item_total( $item ), 2 ),
'quantity' => (int) $item['qty'],
'tax_class' => ( ! empty( $item['tax_class'] ) ) ? $item['tax_class'] : null,
'name' => $item['name'],
'product_id' => ( isset( $product->variation_id ) ) ? $product->variation_id : $product->id,
'sku' => is_object( $product ) ? $product->get_sku() : null,
'meta' => $item_meta,
'refunded_item_id' => (int) $item['refunded_item_id'],
);
}

View File

@ -61,14 +61,43 @@ class WC_API_Products extends WC_API_Resource {
array( array( $this, 'get_product_orders' ), WC_API_Server::READABLE ),
);
# GET /products/categories
# GET/POST /products/categories
$routes[ $this->base . '/categories' ] = array(
array( array( $this, 'get_product_categories' ), WC_API_Server::READABLE ),
array( array( $this, 'create_product_category' ), WC_API_Server::CREATABLE | WC_API_Server::ACCEPT_DATA ),
);
# GET /products/categories/<id>
# GET/PUT/DELETE /products/categories/<id>
$routes[ $this->base . '/categories/(?P<id>\d+)' ] = array(
array( array( $this, 'get_product_category' ), WC_API_Server::READABLE ),
array( array( $this, 'edit_product_category' ), WC_API_Server::EDITABLE | WC_API_Server::ACCEPT_DATA ),
array( array( $this, 'delete_product_category' ), WC_API_Server::DELETABLE ),
);
# GET/POST /products/tags
$routes[ $this->base . '/tags' ] = array(
array( array( $this, 'get_product_tags' ), WC_API_Server::READABLE ),
array( array( $this, 'create_product_tag' ), WC_API_Server::CREATABLE | WC_API_Server::ACCEPT_DATA ),
);
# GET/PUT/DELETE /products/tags/<id>
$routes[ $this->base . '/tags/(?P<id>\d+)' ] = array(
array( array( $this, 'get_product_tag' ), WC_API_Server::READABLE ),
array( array( $this, 'edit_product_tag' ), WC_API_Server::EDITABLE | WC_API_Server::ACCEPT_DATA ),
array( array( $this, 'delete_product_tag' ), WC_API_Server::DELETABLE ),
);
# GET/POST /products/shipping_classes
$routes[ $this->base . '/shipping_classes' ] = array(
array( array( $this, 'get_product_shipping_classes' ), WC_API_Server::READABLE ),
array( array( $this, 'create_product_shipping_class' ), WC_API_Server::CREATABLE | WC_API_Server::ACCEPT_DATA ),
);
# GET/PUT/DELETE /products/shipping_classes/<id>
$routes[ $this->base . '/shipping_classes/(?P<id>\d+)' ] = array(
array( array( $this, 'get_product_shipping_class' ), WC_API_Server::READABLE ),
array( array( $this, 'edit_product_shipping_class' ), WC_API_Server::EDITABLE | WC_API_Server::ACCEPT_DATA ),
array( array( $this, 'delete_product_shipping_class' ), WC_API_Server::DELETABLE ),
);
# GET/POST /products/attributes
@ -151,16 +180,24 @@ class WC_API_Products extends WC_API_Resource {
// add variations to variable products
if ( $product->is_type( 'variable' ) && $product->has_child() ) {
$product_data['variations'] = $this->get_variation_data( $product );
}
// add the parent product data to an individual variation
if ( $product->is_type( 'variation' ) && $product->parent ) {
$product_data['parent'] = $this->get_product_data( $product->parent );
}
// Add grouped products data
if ( $product->is_type( 'grouped' ) && $product->has_child() ) {
$product_data['grouped_products'] = $this->get_grouped_products_data( $product );
}
if ( $product->is_type( 'simple' ) && ! empty( $product->post->post_parent ) ) {
$_product = wc_get_product( $product->post->post_parent );
$product_data['parent'] = $this->get_product_data( $_product );
}
return array( 'product' => apply_filters( 'woocommerce_api_product_response', $product_data, $product, $fields, $this->server ) );
}
@ -557,6 +594,388 @@ class WC_API_Products extends WC_API_Resource {
}
}
/**
* Create a new product category.
*
* @since 2.5.0
* @param array $data Posted data
* @return array|WP_Error Product category if succeed, otherwise WP_Error
* will be returned
*/
public function create_product_category( $data ) {
global $wpdb;
try {
if ( ! isset( $data['product_category'] ) ) {
throw new WC_API_Exception( 'woocommerce_api_missing_product_category_data', sprintf( __( 'No %1$s data specified to create %1$s', 'woocommerce' ), 'product_category' ), 400 );
}
// Check permissions
if ( ! current_user_can( 'manage_product_terms' ) ) {
throw new WC_API_Exception( 'woocommerce_api_user_cannot_create_product_category', __( 'You do not have permission to create product categories', 'woocommerce' ), 401 );
}
$defaults = array(
'name' => '',
'slug' => '',
'description' => '',
'parent' => 0,
'display' => 'default',
'image' => '',
);
$data = wp_parse_args( $data['product_category'], $defaults );
$data = apply_filters( 'woocommerce_api_create_product_category_data', $data, $this );
$name = $data['name'];
unset( $data['name'] );
// Check parent.
$data['parent'] = absint( $data['parent'] );
if ( $data['parent'] ) {
$parent = get_term_by( 'term_taxonomy_id', $data['parent'], 'product_cat' );
if ( ! $parent ) {
throw new WC_API_Exception( 'woocommerce_api_invalid_product_category_parent', __( 'Product category parent is invalid', 'woocommerce' ), 400 );
}
}
$display_type = $data['display'];
unset( $data['display'] );
// If value of image is numeric, assume value as image_id.
$image = $data['image'];
if ( is_numeric( $image ) ) {
$image_id = absint( $image );
} else if ( ! empty( $image ) ) {
$upload = $this->upload_product_image( esc_url_raw( $image ) );
$image_id = $this->set_product_category_image_as_attachment( $upload );
}
unset( $data['image'] );
$insert = wp_insert_term( $name, 'product_cat', $data );
if ( is_wp_error( $insert ) ) {
throw new WC_API_Exception( 'woocommerce_api_cannot_create_product_category', $insert->get_error_message(), 400 );
}
update_woocommerce_term_meta( $insert['term_taxonomy_id'], 'display_type', esc_attr( $display_type ) );
// Check if image_id is a valid image attachment before updating the term meta.
if ( wp_attachment_is_image( $image_id ) ) {
update_woocommerce_term_meta( $insert['term_taxonomy_id'], 'thumbnail_id', $image_id );
}
do_action( 'woocommerce_api_create_product_category', $insert['term_taxonomy_id'], $data );
$this->server->send_status( 201 );
return $this->get_product_category( $insert['term_taxonomy_id'] );
} catch ( WC_API_Exception $e ) {
return new WP_Error( $e->getErrorCode(), $e->getMessage(), array( 'status' => $e->getCode() ) );
}
}
/**
* Edit a product category.
*
* @since 2.5.0
* @param int $id Product category term ID
* @param array $data Posted data
* @return array|WP_Error Product category if succeed, otherwise WP_Error
* will be returned
*/
public function edit_product_category( $id, $data ) {
global $wpdb;
try {
if ( ! isset( $data['product_category'] ) ) {
throw new WC_API_Exception( 'woocommerce_api_missing_product_category', sprintf( __( 'No %1$s data specified to edit %1$s', 'woocommerce' ), 'product_category' ), 400 );
}
$id = absint( $id );
$data = $data['product_category'];
// Check permissions.
if ( ! current_user_can( 'manage_product_terms' ) ) {
throw new WC_API_Exception( 'woocommerce_api_user_cannot_edit_product_category', __( 'You do not have permission to edit product categories', 'woocommerce' ), 401 );
}
$data = apply_filters( 'woocommerce_api_edit_product_category_data', $data, $this );
$category = $this->get_product_category( $id );
if ( is_wp_error( $category ) ) {
return $category;
}
$display_type = '';
if ( isset( $data['display'] ) ) {
$display_type = $data['display'];
unset( $data['display'] );
}
if ( isset( $data['image'] ) ) {
// If value of image is numeric, assume value as image_id.
$image = $data['image'];
if ( is_numeric( $image ) ) {
$image_id = absint( $image );
} else if ( ! empty( $image ) ) {
$upload = $this->upload_product_image( esc_url_raw( $image ) );
$image_id = $this->set_product_category_image_as_attachment( $upload );
}
// In case client supplies invalid image or wants to unset category
// image.
if ( ! wp_attachment_is_image( $image_id ) ) {
$image_id = '';
}
unset( $data['image'] );
}
$update = wp_update_term( $id, 'product_cat', $data );
if ( is_wp_error( $update ) ) {
throw new WC_API_Exception( 'woocommerce_api_cannot_edit_product_catgory', __( 'Could not edit the category', 'woocommerce' ), 400 );
}
if ( ! empty( $display_type ) ) {
update_woocommerce_term_meta( $update['term_taxonomy_id'], 'display_type', esc_attr( $display_type ) );
}
if ( isset( $image_id ) ) {
update_woocommerce_term_meta( $update['term_taxonomy_id'], 'thumbnail_id', $image_id );
}
do_action( 'woocommerce_api_edit_product_category', $id, $data );
return $this->get_product_category( $id );
} catch ( WC_API_Exception $e ) {
return new WP_Error( $e->getErrorCode(), $e->getMessage(), array( 'status' => $e->getCode() ) );
}
}
/**
* Delete a product category.
*
* @since 2.5.0
* @param int $id Product category term ID
* @return array|WP_Error Success message if succeed, otherwise WP_Error
* will be returned
*/
public function delete_product_category( $id ) {
global $wpdb;
try {
// Check permissions
if ( ! current_user_can( 'manage_product_terms' ) ) {
throw new WC_API_Exception( 'woocommerce_api_user_cannot_delete_product_category', __( 'You do not have permission to delete product category', 'woocommerce' ), 401 );
}
$id = absint( $id );
$deleted = wp_delete_term( $id, 'product_cat' );
if ( ! $deleted || is_wp_error( $deleted ) ) {
throw new WC_API_Exception( 'woocommerce_api_cannot_delete_product_category', __( 'Could not delete the category', 'woocommerce' ), 401 );
}
// When a term is deleted, delete its meta.
$wpdb->delete( $wpdb->woocommerce_termmeta, array( 'woocommerce_term_id' => $id ), array( '%d' ) );
do_action( 'woocommerce_api_delete_product_category', $id, $this );
return array( 'message' => sprintf( __( 'Deleted %s', 'woocommerce' ), 'product_category' ) );
} catch ( WC_API_Exception $e ) {
return new WP_Error( $e->getErrorCode(), $e->getMessage(), array( 'status' => $e->getCode() ) );
}
}
/**
* Get a listing of product tags.
*
* @since 2.5.0
* @param string|null $fields Fields to limit response to
* @return array Product tags
*/
public function get_product_tags( $fields = null ) {
try {
// Permissions check
if ( ! current_user_can( 'manage_product_terms' ) ) {
throw new WC_API_Exception( 'woocommerce_api_user_cannot_read_product_tags', __( 'You do not have permission to read product tags', 'woocommerce' ), 401 );
}
$product_tags = array();
$terms = get_terms( 'product_tag', array( 'hide_empty' => false, 'fields' => 'ids' ) );
foreach ( $terms as $term_id ) {
$product_tags[] = current( $this->get_product_tag( $term_id, $fields ) );
}
return array( 'product_tags' => apply_filters( 'woocommerce_api_product_tags_response', $product_tags, $terms, $fields, $this ) );
} catch ( WC_API_Exception $e ) {
return new WP_Error( $e->getErrorCode(), $e->getMessage(), array( 'status' => $e->getCode() ) );
}
}
/**
* Get the product tag for the given ID.
*
* @since 2.5.0
* @param string $id Product tag term ID
* @param string|null $fields Fields to limit response to
* @return array Product tag
*/
public function get_product_tag( $id, $fields = null ) {
try {
$id = absint( $id );
// Validate ID
if ( empty( $id ) ) {
throw new WC_API_Exception( 'woocommerce_api_invalid_product_tag_id', __( 'Invalid product tag ID', 'woocommerce' ), 400 );
}
// Permissions check
if ( ! current_user_can( 'manage_product_terms' ) ) {
throw new WC_API_Exception( 'woocommerce_api_user_cannot_read_product_tags', __( 'You do not have permission to read product tags', 'woocommerce' ), 401 );
}
$term = get_term( $id, 'product_tag' );
if ( is_wp_error( $term ) || is_null( $term ) ) {
throw new WC_API_Exception( 'woocommerce_api_invalid_product_tag_id', __( 'A product tag with the provided ID could not be found', 'woocommerce' ), 404 );
}
$term_id = intval( $term->term_id );
$tag = array(
'id' => $term_id,
'name' => $term->name,
'slug' => $term->slug,
'description' => $term->description,
'count' => intval( $term->count )
);
return array( 'product_tag' => apply_filters( 'woocommerce_api_product_tag_response', $tag, $id, $fields, $term, $this ) );
} catch ( WC_API_Exception $e ) {
return new WP_Error( $e->getErrorCode(), $e->getMessage(), array( 'status' => $e->getCode() ) );
}
}
/**
* Create a new product tag.
*
* @since 2.5.0
* @param array $data Posted data
* @return array|WP_Error Product tag if succeed, otherwise WP_Error
* will be returned
*/
public function create_product_tag( $data ) {
try {
if ( ! isset( $data['product_tag'] ) ) {
throw new WC_API_Exception( 'woocommerce_api_missing_product_tag_data', sprintf( __( 'No %1$s data specified to create %1$s', 'woocommerce' ), 'product_tag' ), 400 );
}
// Check permissions
if ( ! current_user_can( 'manage_product_terms' ) ) {
throw new WC_API_Exception( 'woocommerce_api_user_cannot_create_product_tag', __( 'You do not have permission to create product tags', 'woocommerce' ), 401 );
}
$defaults = array(
'name' => '',
'slug' => '',
'description' => '',
);
$data = wp_parse_args( $data['product_tag'], $defaults );
$data = apply_filters( 'woocommerce_api_create_product_tag_data', $data, $this );
$name = $data['name'];
unset( $data['name'] );
$insert = wp_insert_term( $name, 'product_tag', $data );
if ( is_wp_error( $insert ) ) {
throw new WC_API_Exception( 'woocommerce_api_cannot_create_product_tag', $insert->get_error_message(), 400 );
}
do_action( 'woocommerce_api_create_product_tag', $insert['term_taxonomy_id'], $data );
$this->server->send_status( 201 );
return $this->get_product_tag( $insert['term_taxonomy_id'] );
} catch ( WC_API_Exception $e ) {
return new WP_Error( $e->getErrorCode(), $e->getMessage(), array( 'status' => $e->getCode() ) );
}
}
/**
* Edit a product tag.
*
* @since 2.5.0
* @param int $id Product tag term ID
* @param array $data Posted data
* @return array|WP_Error Product tag if succeed, otherwise WP_Error
* will be returned
*/
public function edit_product_tag( $id, $data ) {
try {
if ( ! isset( $data['product_tag'] ) ) {
throw new WC_API_Exception( 'woocommerce_api_missing_product_tag', sprintf( __( 'No %1$s data specified to edit %1$s', 'woocommerce' ), 'product_tag' ), 400 );
}
$id = absint( $id );
$data = $data['product_tag'];
// Check permissions.
if ( ! current_user_can( 'manage_product_terms' ) ) {
throw new WC_API_Exception( 'woocommerce_api_user_cannot_edit_product_tag', __( 'You do not have permission to edit product tags', 'woocommerce' ), 401 );
}
$data = apply_filters( 'woocommerce_api_edit_product_tag_data', $data, $this );
$tag = $this->get_product_tag( $id );
if ( is_wp_error( $tag ) ) {
return $tag;
}
$update = wp_update_term( $id, 'product_tag', $data );
if ( is_wp_error( $update ) ) {
throw new WC_API_Exception( 'woocommerce_api_cannot_edit_product_tag', __( 'Could not edit the tag', 'woocommerce' ), 400 );
}
do_action( 'woocommerce_api_edit_product_tag', $id, $data );
return $this->get_product_tag( $id );
} catch ( WC_API_Exception $e ) {
return new WP_Error( $e->getErrorCode(), $e->getMessage(), array( 'status' => $e->getCode() ) );
}
}
/**
* Delete a product tag.
*
* @since 2.5.0
* @param int $id Product tag term ID
* @return array|WP_Error Success message if succeed, otherwise WP_Error
* will be returned
*/
public function delete_product_tag( $id ) {
try {
// Check permissions
if ( ! current_user_can( 'manage_product_terms' ) ) {
throw new WC_API_Exception( 'woocommerce_api_user_cannot_delete_product_tag', __( 'You do not have permission to delete product tag', 'woocommerce' ), 401 );
}
$id = absint( $id );
$deleted = wp_delete_term( $id, 'product_tag' );
if ( ! $deleted || is_wp_error( $deleted ) ) {
throw new WC_API_Exception( 'woocommerce_api_cannot_delete_product_tag', __( 'Could not delete the tag', 'woocommerce' ), 401 );
}
do_action( 'woocommerce_api_delete_product_tag', $id, $this );
return array( 'message' => sprintf( __( 'Deleted %s', 'woocommerce' ), 'product_tag' ) );
} catch ( WC_API_Exception $e ) {
return new WP_Error( $e->getErrorCode(), $e->getMessage(), array( 'status' => $e->getCode() ) );
}
}
/**
* Helper method to get product post objects
*
@ -574,24 +993,40 @@ class WC_API_Products extends WC_API_Resource {
'meta_query' => array(),
);
if ( ! empty( $args['type'] ) ) {
// Taxonomy query to filter products by type, category, tag, shipping class, and
// attribute.
$tax_query = array();
$types = explode( ',', $args['type'] );
// Map between taxonomy name and arg's key.
$taxonomies_arg_map = array(
'product_type' => 'type',
'product_cat' => 'category',
'product_tag' => 'tag',
'product_shipping_class' => 'shipping_class',
);
$query_args['tax_query'] = array(
array(
'taxonomy' => 'product_type',
'field' => 'slug',
'terms' => $types,
),
);
unset( $args['type'] );
// Add attribute taxonomy names into the map.
foreach ( wc_get_attribute_taxonomy_names() as $attribute_name ) {
$taxonomies_arg_map[ $attribute_name ] = $attribute_name;
}
// Filter products by category
if ( ! empty( $args['category'] ) ) {
$query_args['product_cat'] = $args['category'];
// Set tax_query for each passed arg.
foreach ( $taxonomies_arg_map as $tax_name => $arg ) {
if ( ! empty( $args[ $arg ] ) ) {
$terms = explode( ',', $args[ $arg ] );
$tax_query[] = array(
'taxonomy' => $tax_name,
'field' => 'slug',
'terms' => $terms,
);
unset( $args[ $arg ] );
}
}
if ( ! empty( $tax_query ) ) {
$query_args['tax_query'] = $tax_query;
}
// Filter by specific sku
@ -676,7 +1111,7 @@ class WC_API_Products extends WC_API_Resource {
'categories' => wp_get_post_terms( $product->id, 'product_cat', array( 'fields' => 'names' ) ),
'tags' => wp_get_post_terms( $product->id, 'product_tag', array( 'fields' => 'names' ) ),
'images' => $this->get_images( $product ),
'featured_src' => wp_get_attachment_url( get_post_thumbnail_id( $product->is_type( 'variation' ) ? $product->variation_id : $product->id ) ),
'featured_src' => (string) wp_get_attachment_url( get_post_thumbnail_id( $product->is_type( 'variation' ) ? $product->variation_id : $product->id ) ),
'attributes' => $this->get_attributes( $product ),
'downloads' => $this->get_downloads( $product ),
'download_limit' => (int) $product->download_limit,
@ -686,6 +1121,7 @@ class WC_API_Products extends WC_API_Resource {
'total_sales' => metadata_exists( 'post', $product->id, 'total_sales' ) ? (int) get_post_meta( $product->id, 'total_sales', true ) : 0,
'variations' => array(),
'parent' => array(),
'grouped_products' => array(),
);
}
@ -749,6 +1185,31 @@ class WC_API_Products extends WC_API_Resource {
return $variations;
}
/**
* Get grouped products data
*
* @since 2.5.0
* @param WC_Product $product
*
* @return array
*/
private function get_grouped_products_data( $product ) {
$products = array();
foreach ( $product->get_children() as $child_id ) {
$_product = $product->get_child( $child_id );
if ( ! $_product->exists() ) {
continue;
}
$products[] = $this->get_product_data( $_product );
}
return $products;
}
/**
* Save product meta
*
@ -859,7 +1320,7 @@ class WC_API_Products extends WC_API_Resource {
// Text based attributes - Posted values are term names - don't change to slugs
} else {
$values = array_map( 'stripslashes', array_map( 'strip_tags', explode( WC_DELIMITER, $attribute['options'] ) ) );
$values = array_map( 'wc_sanitize_term_text_based', explode( WC_DELIMITER, $attribute['options'] ) );
}
$values = array_filter( $values, 'strlen' );
@ -1091,7 +1552,12 @@ class WC_API_Products extends WC_API_Resource {
// Stock quantity
if ( isset( $data['stock_quantity'] ) ) {
wc_update_product_stock( $product_id, intval( $data['stock_quantity'] ) );
wc_update_product_stock( $product_id, wc_stock_amount( $data['stock_quantity'] ) );
} else if ( isset( $data['inventory_delta'] ) ) {
$stock_quantity = wc_stock_amount( get_post_meta( $product_id, '_stock', true ) );
$stock_quantity += wc_stock_amount( $data['inventory_delta'] );
wc_update_product_stock( $product_id, wc_stock_amount( $stock_quantity ) );
}
} else {
@ -1349,6 +1815,11 @@ class WC_API_Products extends WC_API_Resource {
if ( isset( $variation['stock_quantity'] ) ) {
wc_update_product_stock( $variation_id, wc_stock_amount( $variation['stock_quantity'] ) );
} else if ( isset( $data['inventory_delta'] ) ) {
$stock_quantity = wc_stock_amount( get_post_meta( $variation_id, '_stock', true ) );
$stock_quantity += wc_stock_amount( $data['inventory_delta'] );
wc_update_product_stock( $variation_id, wc_stock_amount( $stock_quantity ) );
}
} else {
delete_post_meta( $variation_id, '_backorders' );
@ -1450,13 +1921,16 @@ class WC_API_Products extends WC_API_Resource {
continue;
}
$taxonomy = sanitize_title( $attribute['name'] );
$_attribute = array();
if ( isset( $attribute['slug'] ) ) {
$taxonomy = $this->get_attribute_taxonomy_by_slug( $attribute['slug'] );
}
if ( ! $taxonomy ) {
$taxonomy = sanitize_title( $attribute['name'] );
}
if ( isset( $attributes[ $taxonomy ] ) ) {
$_attribute = $attributes[ $taxonomy ];
}
@ -1768,6 +2242,16 @@ class WC_API_Products extends WC_API_Resource {
$gallery[] = $attachment_id;
}
}
// Set the image alt if present.
if ( ! empty( $image['alt'] ) ) {
update_post_meta( $attachment_id, '_wp_attachment_image_alt', wc_clean( $image['alt'] ) );
}
// Set the image title if present.
if ( ! empty( $image['title'] ) ) {
wp_update_post( array( 'ID' => $attachment_id, 'post_title' => $image['title'] ) );
}
}
if ( ! empty( $gallery ) ) {
@ -1787,13 +2271,38 @@ class WC_API_Products extends WC_API_Resource {
* @return int|WP_Error attachment id
*/
public function upload_product_image( $image_url ) {
return $this->upload_image_from_url( $image_url );
}
/**
* Upload product category image from URL.
*
* @since 2.5.0
* @param string $image_url
* @return int|WP_Error attachment id
*/
public function upload_product_category_image( $image_url ) {
return $this->upload_image_from_url( $image_url, 'product_category_image' );
}
/**
* Upload image from URL.
*
* @throws WC_API_Exception
*
* @since 2.5.0
* @param string $image_url
* @param string $upload_for
* @return int|WP_Error Attachment id
*/
protected function upload_image_from_url( $image_url, $upload_for = 'product_image' ) {
$file_name = basename( current( explode( '?', $image_url ) ) );
$wp_filetype = wp_check_filetype( $file_name, null );
$parsed_url = @parse_url( $image_url );
// Check parsed URL
// Check parsed URL.
if ( ! $parsed_url || ! is_array( $parsed_url ) ) {
throw new WC_API_Exception( 'woocommerce_api_invalid_product_image', sprintf( __( 'Invalid URL %s', 'woocommerce' ), $image_url ), 400 );
throw new WC_API_Exception( 'woocommerce_api_invalid_' . $upload_for, sprintf( __( 'Invalid URL %s', 'woocommerce' ), $image_url ), 400 );
}
// Ensure url is valid
@ -1805,7 +2314,7 @@ class WC_API_Products extends WC_API_Resource {
) );
if ( is_wp_error( $response ) || 200 !== wp_remote_retrieve_response_code( $response ) ) {
throw new WC_API_Exception( 'woocommerce_api_invalid_remote_product_image', sprintf( __( 'Error getting remote image %s', 'woocommerce' ), $image_url ), 400 );
throw new WC_API_Exception( 'woocommerce_api_invalid_remote_' . $upload_for, sprintf( __( 'Error getting remote image %s', 'woocommerce' ), $image_url ), 400 );
}
// Ensure we have a file name and type
@ -1825,7 +2334,7 @@ class WC_API_Products extends WC_API_Resource {
$upload = wp_upload_bits( $file_name, '', wp_remote_retrieve_body( $response ) );
if ( $upload['error'] ) {
throw new WC_API_Exception( 'woocommerce_api_product_image_upload_error', $upload['error'], 400 );
throw new WC_API_Exception( 'woocommerce_api_' . $upload_for . '_upload_error', $upload['error'], 400 );
}
// Get filesize
@ -1834,7 +2343,7 @@ class WC_API_Products extends WC_API_Resource {
if ( 0 == $filesize ) {
@unlink( $upload['file'] );
unset( $upload );
throw new WC_API_Exception( 'woocommerce_api_product_image_upload_file_error', __( 'Zero size file downloaded', 'woocommerce' ), 400 );
throw new WC_API_Exception( 'woocommerce_api_' . $upload_for . '_upload_file_error', __( 'Zero size file downloaded', 'woocommerce' ), 400 );
}
unset( $response );
@ -1843,7 +2352,7 @@ class WC_API_Products extends WC_API_Resource {
}
/**
* Get product image as attachment
* Sets product image as attachment and returns the attachment ID.
*
* @since 2.2
* @param integer $upload
@ -1851,6 +2360,29 @@ class WC_API_Products extends WC_API_Resource {
* @return int
*/
protected function set_product_image_as_attachment( $upload, $id ) {
return $this->set_uploaded_image_as_attachment( $upload, $id );
}
/**
* Sets uploaded category image as attachment and returns the attachment ID.
*
* @since 2.5.0
* @param integer $upload Upload information from wp_upload_bits
* @return int Attachment ID
*/
protected function set_product_category_image_as_attachment( $upload ) {
return $this->set_uploaded_image_as_attachment( $upload );
}
/**
* Set uploaded image as attachment.
*
* @since 2.5.0
* @param array $upload Upload information from wp_upload_bits
* @param int $id Post ID. Default to 0.
* @return int Attachment ID
*/
protected function set_uploaded_image_as_attachment( $upload, $id = 0 ) {
$info = wp_check_filetype( $upload['file'] );
$title = '';
$content = '';
@ -2394,4 +2926,211 @@ class WC_API_Products extends WC_API_Resource {
return new WP_Error( $e->getErrorCode(), $e->getMessage(), array( 'status' => $e->getCode() ) );
}
}
/**
* Get a listing of product shipping classes.
*
* @since 2.5.0
* @param string|null $fields Fields to limit response to
* @return array|WP_Error List of product shipping classes if succeed,
* otherwise WP_Error will be returned
*/
public function get_product_shipping_classes( $fields = null ) {
try {
// Permissions check
if ( ! current_user_can( 'manage_product_terms' ) ) {
throw new WC_API_Exception( 'woocommerce_api_user_cannot_read_product_shipping_classes', __( 'You do not have permission to read product shipping classes', 'woocommerce' ), 401 );
}
$product_shipping_classes = array();
$terms = get_terms( 'product_shipping_class', array( 'hide_empty' => false, 'fields' => 'ids' ) );
foreach ( $terms as $term_id ) {
$product_shipping_classes[] = current( $this->get_product_shipping_class( $term_id, $fields ) );
}
return array( 'product_shipping_classes' => apply_filters( 'woocommerce_api_product_shipping_classes_response', $product_shipping_classes, $terms, $fields, $this ) );
} catch ( WC_API_Exception $e ) {
return new WP_Error( $e->getErrorCode(), $e->getMessage(), array( 'status' => $e->getCode() ) );
}
}
/**
* Get the product shipping class for the given ID.
*
* @since 2.5.0
* @param string $id Product shipping class term ID
* @param string|null $fields Fields to limit response to
* @return array|WP_Error Product shipping class if succeed, otherwise
* WP_Error will be returned
*/
public function get_product_shipping_class( $id, $fields = null ) {
try {
$id = absint( $id );
if ( ! $id ) {
throw new WC_API_Exception( 'woocommerce_api_invalid_product_shipping_class_id', __( 'Invalid product shipping class ID', 'woocommerce' ), 400 );
}
// Permissions check
if ( ! current_user_can( 'manage_product_terms' ) ) {
throw new WC_API_Exception( 'woocommerce_api_user_cannot_read_product_shipping_classes', __( 'You do not have permission to read product shipping classes', 'woocommerce' ), 401 );
}
$term = get_term( $id, 'product_shipping_class' );
if ( is_wp_error( $term ) || is_null( $term ) ) {
throw new WC_API_Exception( 'woocommerce_api_invalid_product_shipping_class_id', __( 'A product shipping class with the provided ID could not be found', 'woocommerce' ), 404 );
}
$term_id = intval( $term->term_id );
$product_shipping_class = array(
'id' => $term_id,
'name' => $term->name,
'slug' => $term->slug,
'parent' => $term->parent,
'description' => $term->description,
'count' => intval( $term->count )
);
return array( 'product_shipping_class' => apply_filters( 'woocommerce_api_product_shipping_class_response', $product_shipping_class, $id, $fields, $term, $this ) );
} catch ( WC_API_Exception $e ) {
return new WP_Error( $e->getErrorCode(), $e->getMessage(), array( 'status' => $e->getCode() ) );
}
}
/**
* Create a new product shipping class.
*
* @since 2.5.0
* @param array $data Posted data
* @return array|WP_Error Product shipping class if succeed, otherwise
* WP_Error will be returned
*/
public function create_product_shipping_class( $data ) {
global $wpdb;
try {
if ( ! isset( $data['product_shipping_class'] ) ) {
throw new WC_API_Exception( 'woocommerce_api_missing_product_shipping_class_data', sprintf( __( 'No %1$s data specified to create %1$s', 'woocommerce' ), 'product_shipping_class' ), 400 );
}
// Check permissions
if ( ! current_user_can( 'manage_product_terms' ) ) {
throw new WC_API_Exception( 'woocommerce_api_user_cannot_create_product_shipping_class', __( 'You do not have permission to create product shipping classes', 'woocommerce' ), 401 );
}
$defaults = array(
'name' => '',
'slug' => '',
'description' => '',
'parent' => 0,
);
$data = wp_parse_args( $data['product_shipping_class'], $defaults );
$data = apply_filters( 'woocommerce_api_create_product_shipping_class_data', $data, $this );
$name = $data['name'];
unset( $data['name'] );
// Check parent.
$data['parent'] = absint( $data['parent'] );
if ( $data['parent'] ) {
$parent = get_term_by( 'term_taxonomy_id', $data['parent'], 'product_shipping_class' );
if ( ! $parent ) {
throw new WC_API_Exception( 'woocommerce_api_invalid_product_shipping_class_parent', __( 'Product shipping class parent is invalid', 'woocommerce' ), 400 );
}
}
$insert = wp_insert_term( $name, 'product_shipping_class', $data );
if ( is_wp_error( $insert ) ) {
throw new WC_API_Exception( 'woocommerce_api_cannot_create_product_shipping_class', $insert->get_error_message(), 400 );
}
do_action( 'woocommerce_api_create_product_shipping_class', $insert['term_taxonomy_id'], $data );
$this->server->send_status( 201 );
return $this->get_product_shipping_class( $insert['term_taxonomy_id'] );
} catch ( WC_API_Exception $e ) {
return new WP_Error( $e->getErrorCode(), $e->getMessage(), array( 'status' => $e->getCode() ) );
}
}
/**
* Edit a product shipping class.
*
* @since 2.5.0
* @param int $id Product shipping class term ID
* @param array $data Posted data
* @return array|WP_Error Product shipping class if succeed, otherwise
* WP_Error will be returned
*/
public function edit_product_shipping_class( $id, $data ) {
global $wpdb;
try {
if ( ! isset( $data['product_shipping_class'] ) ) {
throw new WC_API_Exception( 'woocommerce_api_missing_product_shipping_class', sprintf( __( 'No %1$s data specified to edit %1$s', 'woocommerce' ), 'product_shipping_class' ), 400 );
}
$id = absint( $id );
$data = $data['product_shipping_class'];
// Check permissions
if ( ! current_user_can( 'manage_product_terms' ) ) {
throw new WC_API_Exception( 'woocommerce_api_user_cannot_edit_product_shipping_class', __( 'You do not have permission to edit product shipping classes', 'woocommerce' ), 401 );
}
$data = apply_filters( 'woocommerce_api_edit_product_shipping_class_data', $data, $this );
$shipping_class = $this->get_product_shipping_class( $id );
if ( is_wp_error( $shipping_class ) ) {
return $shipping_class;
}
$update = wp_update_term( $id, 'product_shipping_class', $data );
if ( is_wp_error( $update ) ) {
throw new WC_API_Exception( 'woocommerce_api_cannot_edit_product_shipping_class', __( 'Could not edit the shipping class', 'woocommerce' ), 400 );
}
do_action( 'woocommerce_api_edit_product_shipping_class', $id, $data );
return $this->get_product_shipping_class( $id );
} catch ( WC_API_Exception $e ) {
return new WP_Error( $e->getErrorCode(), $e->getMessage(), array( 'status' => $e->getCode() ) );
}
}
/**
* Delete a product shipping class.
*
* @since 2.5.0
* @param int $id Product shipping class term ID
* @return array|WP_Error Success message if succeed, otherwise WP_Error
* will be returned
*/
public function delete_product_shipping_class( $id ) {
global $wpdb;
try {
// Check permissions
if ( ! current_user_can( 'manage_product_terms' ) ) {
throw new WC_API_Exception( 'woocommerce_api_user_cannot_delete_product_shipping_class', __( 'You do not have permission to delete product shipping classes', 'woocommerce' ), 401 );
}
$id = absint( $id );
$deleted = wp_delete_term( $id, 'product_shipping_class' );
if ( ! $deleted || is_wp_error( $deleted ) ) {
throw new WC_API_Exception( 'woocommerce_api_cannot_delete_product_shipping_class', __( 'Could not delete the shipping class', 'woocommerce' ), 401 );
}
do_action( 'woocommerce_api_delete_product_shipping_class', $id, $this );
return array( 'message' => sprintf( __( 'Deleted %s', 'woocommerce' ), 'product_shipping_class' ) );
} catch ( WC_API_Exception $e ) {
return new WP_Error( $e->getErrorCode(), $e->getMessage(), array( 'status' => $e->getCode() ) );
}
}
}

View File

@ -646,6 +646,11 @@ class WC_API_Server {
* @return string
*/
public function get_raw_data() {
// $HTTP_RAW_POST_DATA is deprecated on PHP 5.6
if ( function_exists( 'phpversion' ) && version_compare( phpversion(), '5.6', '>=' ) ) {
return file_get_contents( 'php://input' );
}
global $HTTP_RAW_POST_DATA;
// A bug in PHP < 5.2.2 makes $HTTP_RAW_POST_DATA not set by default,

View File

@ -609,11 +609,16 @@ class WC_API_Server {
* @return string
*/
public function get_raw_data() {
// $HTTP_RAW_POST_DATA is deprecated on PHP 5.6
if ( function_exists( 'phpversion' ) && version_compare( phpversion(), '5.6', '>=' ) ) {
return file_get_contents( 'php://input' );
}
global $HTTP_RAW_POST_DATA;
// A bug in PHP < 5.2.2 makes $HTTP_RAW_POST_DATA not set by default,
// but we can do it ourself.
if ( !isset( $HTTP_RAW_POST_DATA ) ) {
if ( ! isset( $HTTP_RAW_POST_DATA ) ) {
$HTTP_RAW_POST_DATA = file_get_contents( 'php://input' );
}

View File

@ -241,7 +241,7 @@ class WC_API_Customers extends WC_API_Resource {
$query = $this->query_customers( $filter );
return array( 'count' => count( $query->get_results() ) );
return array( 'count' => $query->get_total() );
} catch ( WC_API_Exception $e ) {
return new WP_Error( $e->getErrorCode(), $e->getMessage(), array( 'status' => $e->getCode() ) );
}

View File

@ -232,7 +232,7 @@ class WC_API_Orders extends WC_API_Resource {
foreach ( $meta->get_formatted( $hideprefix ) as $meta_key => $formatted_meta ) {
$item_meta[] = array(
'key' => $meta_key,
'key' => $formatted_meta['key'],
'label' => $formatted_meta['label'],
'value' => $formatted_meta['value'],
);
@ -470,12 +470,6 @@ class WC_API_Orders extends WC_API_Resource {
update_post_meta( $order->id, '_order_currency', $data['currency'] );
}
// set order number
if ( isset( $data['order_number'] ) ) {
update_post_meta( $order->id, '_order_number', $data['order_number'] );
}
// set order meta
if ( isset( $data['order_meta'] ) && is_array( $data['order_meta'] ) ) {
$this->set_order_meta( $order->id, $data['order_meta'] );
@ -640,12 +634,6 @@ class WC_API_Orders extends WC_API_Resource {
update_post_meta( $order->id, '_order_currency', $data['currency'] );
}
// set order number
if ( isset( $data['order_number'] ) ) {
update_post_meta( $order->id, '_order_number', $data['order_number'] );
}
// if items have changed, recalculate order totals
if ( $update_totals ) {
$order->calculate_totals();
@ -1554,18 +1542,19 @@ class WC_API_Orders extends WC_API_Resource {
}
$line_items[] = array(
'id' => $item_id,
'subtotal' => wc_format_decimal( $order->get_line_subtotal( $item ), 2 ),
'subtotal_tax' => wc_format_decimal( $item['line_subtotal_tax'], 2 ),
'total' => wc_format_decimal( $order->get_line_total( $item ), 2 ),
'total_tax' => wc_format_decimal( $order->get_line_tax( $item ), 2 ),
'price' => wc_format_decimal( $order->get_item_total( $item ), 2 ),
'quantity' => (int) $item['qty'],
'tax_class' => ( ! empty( $item['tax_class'] ) ) ? $item['tax_class'] : null,
'name' => $item['name'],
'product_id' => ( isset( $product->variation_id ) ) ? $product->variation_id : $product->id,
'sku' => is_object( $product ) ? $product->get_sku() : null,
'meta' => $item_meta,
'id' => $item_id,
'subtotal' => wc_format_decimal( $order->get_line_subtotal( $item ), 2 ),
'subtotal_tax' => wc_format_decimal( $item['line_subtotal_tax'], 2 ),
'total' => wc_format_decimal( $order->get_line_total( $item ), 2 ),
'total_tax' => wc_format_decimal( $order->get_line_tax( $item ), 2 ),
'price' => wc_format_decimal( $order->get_item_total( $item ), 2 ),
'quantity' => (int) $item['qty'],
'tax_class' => ( ! empty( $item['tax_class'] ) ) ? $item['tax_class'] : null,
'name' => $item['name'],
'product_id' => ( isset( $product->variation_id ) ) ? $product->variation_id : $product->id,
'sku' => is_object( $product ) ? $product->get_sku() : null,
'meta' => $item_meta,
'refunded_item_id' => (int) $item['refunded_item_id'],
);
}

View File

@ -681,7 +681,7 @@ class WC_API_Products extends WC_API_Resource {
'categories' => wp_get_post_terms( $product->id, 'product_cat', array( 'fields' => 'names' ) ),
'tags' => wp_get_post_terms( $product->id, 'product_tag', array( 'fields' => 'names' ) ),
'images' => $this->get_images( $product ),
'featured_src' => wp_get_attachment_url( get_post_thumbnail_id( $product->is_type( 'variation' ) ? $product->variation_id : $product->id ) ),
'featured_src' => (string) wp_get_attachment_url( get_post_thumbnail_id( $product->is_type( 'variation' ) ? $product->variation_id : $product->id ) ),
'attributes' => $this->get_attributes( $product ),
'downloads' => $this->get_downloads( $product ),
'download_limit' => (int) $product->download_limit,
@ -864,7 +864,7 @@ class WC_API_Products extends WC_API_Resource {
// Text based attributes - Posted values are term names - don't change to slugs
} else {
$values = array_map( 'stripslashes', array_map( 'strip_tags', explode( WC_DELIMITER, $attribute['options'] ) ) );
$values = array_map( 'wc_sanitize_term_text_based', explode( WC_DELIMITER, $attribute['options'] ) );
}
$values = array_filter( $values, 'strlen' );
@ -1455,13 +1455,16 @@ class WC_API_Products extends WC_API_Resource {
continue;
}
$taxonomy = sanitize_title( $attribute['name'] );
$_attribute = array();
if ( isset( $attribute['slug'] ) ) {
$taxonomy = $this->get_attribute_taxonomy_by_slug( $attribute['slug'] );
}
if ( ! $taxonomy ) {
$taxonomy = sanitize_title( $attribute['name'] );
}
if ( isset( $attributes[ $taxonomy ] ) ) {
$_attribute = $attributes[ $taxonomy ];
}

View File

@ -646,6 +646,11 @@ class WC_API_Server {
* @return string
*/
public function get_raw_data() {
// $HTTP_RAW_POST_DATA is deprecated on PHP 5.6
if ( function_exists( 'phpversion' ) && version_compare( phpversion(), '5.6', '>=' ) ) {
return file_get_contents( 'php://input' );
}
global $HTTP_RAW_POST_DATA;
// A bug in PHP < 5.2.2 makes $HTTP_RAW_POST_DATA not set by default,

View File

@ -36,7 +36,7 @@ class WC_AJAX {
}
/**
* Set AJAX defines.
* Set WC AJAX constant and headers.
*/
public static function define_ajax() {
if ( ! empty( $_GET['wc-ajax'] ) ) {
@ -50,6 +50,12 @@ class WC_AJAX {
if ( ! WP_DEBUG || ( WP_DEBUG && ! WP_DEBUG_DISPLAY ) ) {
@ini_set( 'display_errors', 0 );
}
// Send headers like admin-ajax.php
send_origin_headers();
@header( 'Content-Type: text/html; charset=' . get_option( 'blog_charset' ) );
@header( 'X-Robots-Tag: noindex' );
send_nosniff_header();
nocache_headers();
}
}
@ -483,7 +489,7 @@ class WC_AJAX {
if ( wc_is_order_status( 'wc-' . $status ) && $order_id ) {
$order = wc_get_order( $order_id );
$order->update_status( $status );
$order->update_status( $status, '', true );
do_action( 'woocommerce_order_edit_status', $order_id, $status );
}
}
@ -646,7 +652,7 @@ class WC_AJAX {
// Text based attributes - Posted values are term names, wp_set_object_terms wants ids or slugs.
} else {
$values = array();
$raw_values = array_map( 'stripslashes', array_map( 'strip_tags', explode( WC_DELIMITER, $attribute_values[ $i ] ) ) );
$raw_values = array_map( 'wc_sanitize_term_text_based', explode( WC_DELIMITER, $attribute_values[ $i ] ) );
foreach ( $raw_values as $value ) {
$term = get_term_by( 'name', $value, $attribute_names[ $i ] );
@ -688,8 +694,9 @@ class WC_AJAX {
} elseif ( isset( $attribute_values[ $i ] ) ) {
// Text based, separate by pipe
$values = implode( ' ' . WC_DELIMITER . ' ', array_map( 'wc_clean', explode( WC_DELIMITER, wp_unslash( $attribute_values[ $i ] ) ) ) );
// Text based, possibly separated by pipes (WC_DELIMITER). Preserve line breaks in non-variation attributes.
$values = $is_variation ? wc_clean( $attribute_values[ $i ] ) : implode( "\n", array_map( 'wc_clean', explode( "\n", $attribute_values[ $i ] ) ) );
$values = implode( ' ' . WC_DELIMITER . ' ', wc_get_text_attributes( $values ) );
// Custom attribute - Add attribute to array and set the values
$attributes[ sanitize_title( $attribute_names[ $i ] ) ] = array(
@ -753,75 +760,111 @@ class WC_AJAX {
do_action( 'woocommerce_create_product_variation', $variation_id );
if ( $variation_id ) {
$variation = get_post( $variation_id );
$variation_meta = get_post_meta( $variation_id );
$variation_data = array();
$shipping_classes = get_the_terms( $variation_id, 'product_shipping_class' );
$variation_fields = array(
'_sku' => '',
'_stock' => '',
'_regular_price' => '',
'_sale_price' => '',
'_weight' => '',
'_length' => '',
'_width' => '',
'_height' => '',
'_download_limit' => '',
'_download_expiry' => '',
'_downloadable_files' => '',
'_downloadable' => '',
'_virtual' => '',
'_thumbnail_id' => '',
'_sale_price_dates_from' => '',
'_sale_price_dates_to' => '',
'_manage_stock' => '',
'_stock_status' => '',
'_backorders' => null,
'_tax_class' => null,
'_variation_description' => ''
);
$variation_post_status = 'publish';
$variation_data = get_post_meta( $variation_id );
$variation_data['variation_post_id'] = $variation_id;
foreach ( $variation_fields as $field => $value ) {
$variation_data[ $field ] = isset( $variation_meta[ $field ][0] ) ? maybe_unserialize( $variation_meta[ $field ][0] ) : $value;
}
// Get attributes
$attributes = (array) maybe_unserialize( get_post_meta( $post_id, '_product_attributes', true ) );
// Add the variation attributes
$variation_data = array_merge( $variation_data, wc_get_product_variation_attributes( $variation_id ) );
// Formatting
$variation_data['_regular_price'] = wc_format_localized_price( $variation_data['_regular_price'] );
$variation_data['_sale_price'] = wc_format_localized_price( $variation_data['_sale_price'] );
$variation_data['_weight'] = wc_format_localized_decimal( $variation_data['_weight'] );
$variation_data['_length'] = wc_format_localized_decimal( $variation_data['_length'] );
$variation_data['_width'] = wc_format_localized_decimal( $variation_data['_width'] );
$variation_data['_height'] = wc_format_localized_decimal( $variation_data['_height'] );
$variation_data['_thumbnail_id'] = absint( $variation_data['_thumbnail_id'] );
$variation_data['image'] = $variation_data['_thumbnail_id'] ? wp_get_attachment_thumb_url( $variation_data['_thumbnail_id'] ) : '';
$variation_data['shipping_class'] = $shipping_classes && ! is_wp_error( $shipping_classes ) ? current( $shipping_classes )->term_id : '';
$variation_data['menu_order'] = $variation->menu_order;
$variation_data['_stock'] = wc_stock_amount( $variation_data['_stock'] );
// Get tax classes
$tax_classes = WC_Tax::get_tax_classes();
$tax_class_options = array();
$tax_class_options[''] = __( 'Standard', 'woocommerce' );
$tax_classes = WC_Tax::get_tax_classes();
$tax_class_options = array();
$tax_class_options[''] = __( 'Standard', 'woocommerce' );
if ( $tax_classes ) {
if ( ! empty( $tax_classes ) ) {
foreach ( $tax_classes as $class ) {
$tax_class_options[ sanitize_title( $class ) ] = $class;
$tax_class_options[ sanitize_title( $class ) ] = esc_attr( $class );
}
}
// Set backorder options
$backorder_options = array(
'no' => __( 'Do not allow', 'woocommerce' ),
'notify' => __( 'Allow, but notify customer', 'woocommerce' ),
'yes' => __( 'Allow', 'woocommerce' )
);
// set stock status options
$stock_status_options = array(
'instock' => __( 'In stock', 'woocommerce' ),
'outofstock' => __( 'Out of stock', 'woocommerce' )
);
// Get parent data
// Get attributes
$attributes = (array) maybe_unserialize( get_post_meta( $post_id, '_product_attributes', true ) );
$parent_data = array(
'id' => $post_id,
'attributes' => $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 ),
'backorder_options' => $backorder_options,
'stock_status_options' => $stock_status_options
);
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 );
}
$_tax_class = null;
$_downloadable_files = '';
$_stock_status = '';
$_backorders = '';
$image_id = 0;
$_thumbnail_id = '';
$variation = get_post( $variation_id ); // Get the variation object
include( 'admin/meta-boxes/views/html-variation-admin.php' );
}
@ -844,7 +887,7 @@ class WC_AJAX {
}
if ( function_exists( 'set_time_limit' ) && false === strpos( ini_get( 'disable_functions' ), 'set_time_limit' ) && ! ini_get( 'safe_mode' ) ) {
set_time_limit( 0 );
@set_time_limit( 0 );
}
$post_id = intval( $_POST['post_id'] );
@ -2326,7 +2369,7 @@ class WC_AJAX {
}
$key_id = absint( $_POST['key_id'] );
$description = sanitize_text_field( $_POST['description'] );
$description = sanitize_text_field( wp_unslash( $_POST['description'] ) );
$permissions = ( in_array( $_POST['permissions'], array( 'read', 'write', 'read_write' ) ) ) ? sanitize_text_field( $_POST['permissions'] ) : 'read';
$user_id = absint( $_POST['user'] );
@ -2425,7 +2468,7 @@ class WC_AJAX {
$posted_attributes = wp_unslash( $_POST['attributes'] );
foreach ( $posted_attributes as $key => $value ) {
$attributes[ wc_clean( $key ) ] = array_map( 'wc_clean', $value );
$attributes[ $key ] = array_map( 'wc_clean', $value );
}
// Get tax classes
@ -2661,8 +2704,8 @@ class WC_AJAX {
private static function variation_bulk_action_toggle_manage_stock( $variations, $data ) {
foreach ( $variations as $variation_id ) {
$_manage_stock = get_post_meta( $variation_id, '_manage_stock', true );
$is_manage_stock = 'no' === $_manage_stock ? 'yes' : 'no';
update_post_meta( $variation_id, '_manage_stock', wc_clean( $is_manage_stock ) );
$is_manage_stock = 'no' === $_manage_stock || '' === $_manage_stock ? 'yes' : 'no';
update_post_meta( $variation_id, '_manage_stock', $is_manage_stock );
}
}
@ -2673,7 +2716,7 @@ class WC_AJAX {
* @param array $data
*/
private static function variation_bulk_action_variable_regular_price( $variations, $data ) {
if ( empty( $data['value'] ) ) {
if ( ! isset( $data['value'] ) ) {
return;
}
@ -2699,7 +2742,7 @@ class WC_AJAX {
* @param array $data
*/
private static function variation_bulk_action_variable_sale_price( $variations, $data ) {
if ( empty( $data['value'] ) ) {
if ( ! isset( $data['value'] ) ) {
return;
}
@ -2725,19 +2768,17 @@ class WC_AJAX {
* @param array $data
*/
private static function variation_bulk_action_variable_stock( $variations, $data ) {
if ( empty( $data['value'] ) ) {
if ( ! isset( $data['value'] ) ) {
return;
}
$value = wc_clean( $data['value'] );
if ( $value ) {
foreach ( $variations as $variation_id ) {
if ( 'yes' === get_post_meta( $variation_id, '_manage_stock', true ) ) {
wc_update_product_stock( $variation_id, wc_stock_amount( $value ) );
} else {
delete_post_meta( $variation_id, '_stock' );
}
foreach ( $variations as $variation_id ) {
if ( 'yes' === get_post_meta( $variation_id, '_manage_stock', true ) ) {
wc_update_product_stock( $variation_id, wc_stock_amount( $value ) );
} else {
delete_post_meta( $variation_id, '_stock' );
}
}
}

View File

@ -241,7 +241,7 @@ class WC_Auth {
'body' => json_encode( $consumer_data ),
'timeout' => 60,
'headers' => array(
'Content-Type' => 'application/xml;charset=' . get_bloginfo( 'charset' ),
'Content-Type' => 'application/json;charset=' . get_bloginfo( 'charset' ),
)
);

View File

@ -78,6 +78,8 @@ class WC_Autoloader {
$path = $this->include_path . 'admin/meta-boxes/';
} elseif ( strpos( $class, 'wc_admin' ) === 0 ) {
$path = $this->include_path . 'admin/';
} elseif ( strpos( $class, 'wc_cli_' ) === 0 ) {
$path = $this->include_path . 'cli/';
}
if ( empty( $path ) || ( ! $this->load_file( $path . $file ) && strpos( $class, 'wc_' ) === 0 ) ) {

View File

@ -70,7 +70,8 @@ class WC_Breadcrumb {
'is_category',
'is_tag',
'is_author',
'is_date'
'is_date',
'is_tax'
);
if ( ( ! is_front_page() && ! ( is_post_type_archive() && get_option( 'page_on_front' ) == wc_get_page_id( 'shop' ) ) ) || is_paged() ) {
@ -276,6 +277,23 @@ class WC_Breadcrumb {
}
}
/**
* Add crumbs for date based archives
*/
private function add_crumbs_tax() {
$this_term = $GLOBALS['wp_query']->get_queried_object();
$taxonomy = get_taxonomy( $this_term->taxonomy );
$this->add_crumb( $taxonomy->labels->name );
if ( 0 != $this_term->parent ) {
$this->term_ancestors( $this_term->parent, 'post_category' );
$this->add_crumb( $this_term->name, get_term_link( $this_term->term_id, $this_term->taxonomy ) );
}
$this->add_crumb( single_term_title( '', false ), get_term_link( $this_term->term_id, $this_term->taxonomy ) );
}
/**
* Add a breadcrumb for author archives
*/

View File

@ -45,7 +45,7 @@ class WC_Cache_Helper {
* This prevents caching of the wrong data for this request.
*/
public static function geolocation_ajax_redirect() {
if ( 'geolocation_ajax' === get_option( 'woocommerce_default_customer_address' ) && ! is_checkout() && ! is_ajax() ) {
if ( 'geolocation_ajax' === get_option( 'woocommerce_default_customer_address' ) && ! is_checkout() && ! is_cart() && ! is_account_page() && ! is_ajax() && empty( $_POST ) ) {
$location_hash = self::geolocation_ajax_get_location_hash();
$current_hash = isset( $_GET['v'] ) ? wc_clean( $_GET['v'] ) : '';
if ( empty( $current_hash ) || $current_hash !== $location_hash ) {
@ -53,6 +53,10 @@ class WC_Cache_Helper {
$redirect_url = trailingslashit( home_url( $wp->request ) );
if ( ! empty( $_SERVER['QUERY_STRING'] ) ) {
$redirect_url = add_query_arg( $_SERVER['QUERY_STRING'], '', $redirect_url );
}
if ( ! get_option( 'permalink_structure' ) ) {
$redirect_url = add_query_arg( $wp->query_string, '', $redirect_url );
}
@ -107,7 +111,7 @@ class WC_Cache_Helper {
if ( ! wp_using_ext_object_cache() && ! empty( $version ) ) {
global $wpdb;
$limit = 1000;
$limit = apply_filters( 'woocommerce_delete_version_transients_limit', 1000 );
$affected = $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->options} WHERE option_name LIKE %s ORDER BY option_id LIMIT %d;", "\_transient\_%" . $version, $limit ) );
// If affected rows is equal to limit, there are more rows to delete. Delete in 10 secs.
@ -147,7 +151,7 @@ class WC_Cache_Helper {
self::nocache();
} elseif ( is_array( $wc_page_uris ) ) {
foreach( $wc_page_uris as $uri ) {
if ( strstr( $_SERVER['REQUEST_URI'], $uri ) ) {
if ( stristr( $_SERVER['REQUEST_URI'], $uri ) ) {
self::nocache();
break;
}

View File

@ -169,7 +169,7 @@ class WC_Cart {
* Will set cart cookies if needed, once, during WP hook
*/
public function maybe_set_cart_cookies() {
if ( ! headers_sent() ) {
if ( ! headers_sent() && did_action( 'wp_loaded' ) ) {
if ( ! $this->is_empty() ) {
$this->set_cart_cookies( true );
} elseif ( isset( $_COOKIE['woocommerce_items_in_cart'] ) ) {
@ -1054,6 +1054,21 @@ class WC_Cart {
do_action( 'woocommerce_cart_reset', $this, $unset_session );
}
/**
* Sort by subtotal
* @param array $a
* @param array $b
* @return int
*/
private function sort_by_subtotal( $a, $b ) {
$first_item_subtotal = isset( $a['line_subtotal'] ) ? $a['line_subtotal'] : 0;
$second_item_subtotal = isset( $b['line_subtotal'] ) ? $b['line_subtotal'] : 0;
if ( $first_item_subtotal === $second_item_subtotal ) {
return 0;
}
return ( $first_item_subtotal < $second_item_subtotal ) ? 1 : -1;
}
/**
* Calculate totals for the items in the cart.
*/
@ -1070,11 +1085,12 @@ class WC_Cart {
$tax_rates = array();
$shop_tax_rates = array();
$cart = $this->get_cart();
/**
* Calculate subtotals for items. This is done first so that discount logic can use the values.
*/
foreach ( $this->get_cart() as $cart_item_key => $values ) {
foreach ( $cart as $cart_item_key => $values ) {
$_product = $values['data'];
@ -1126,8 +1142,12 @@ class WC_Cart {
/**
* ADJUST TAX - Calculations when base tax is not equal to the item tax
*/
if ( $item_tax_rates !== $base_tax_rates ) {
*
* The woocommerce_adjust_non_base_location_prices filter can stop base taxes being taken off when dealing with out of base locations.
* e.g. If a product costs 10 including tax, all users will pay 10 regardless of location and taxes.
* This feature is experimental @since 2.4.7 and may change in the future. Use at your risk.
*/
if ( $item_tax_rates !== $base_tax_rates && apply_filters( 'woocommerce_adjust_non_base_location_prices', true ) ) {
// Work out a new base price without the shop's base tax
$taxes = WC_Tax::calc_tax( $line_price, $base_tax_rates, true, true );
@ -1176,10 +1196,13 @@ class WC_Cart {
$this->subtotal_ex_tax += $line_subtotal;
}
// Order cart items by price so coupon logic is 'fair' for customers and not based on order added to cart.
uasort( $cart, array( $this, 'sort_by_subtotal' ) );
/**
* Calculate totals for items
*/
foreach ( $this->get_cart() as $cart_item_key => $values ) {
foreach ( $cart as $cart_item_key => $values ) {
$_product = $values['data'];
@ -1213,8 +1236,12 @@ class WC_Cart {
/**
* ADJUST TAX - Calculations when base tax is not equal to the item tax
*/
if ( $item_tax_rates !== $base_tax_rates ) {
*
* The woocommerce_adjust_non_base_location_prices filter can stop base taxes being taken off when dealing with out of base locations.
* e.g. If a product costs 10 including tax, all users will pay 10 regardless of location and taxes.
* This feature is experimental @since 2.4.7 and may change in the future. Use at your risk.
*/
if ( $item_tax_rates !== $base_tax_rates && apply_filters( 'woocommerce_adjust_non_base_location_prices', true ) ) {
// Work out a new base price without the shop's base tax
$taxes = WC_Tax::calc_tax( $line_price, $base_tax_rates, true, true );
@ -1588,7 +1615,7 @@ class WC_Cart {
// Usage limits per user - check against billing and user email and user ID
if ( $coupon->usage_limit_per_user > 0 ) {
$check_emails = array();
$used_by = array_filter( (array) get_post_meta( $coupon->id, '_used_by' ) );
$used_by = $coupon->get_used_by();
if ( is_user_logged_in() ) {
$current_user = wp_get_current_user();
@ -1872,12 +1899,12 @@ class WC_Cart {
/*-----------------------------------------------------------------------------------*/
/**
* add_fee function.
* Add additional fee to the cart
*
* @param mixed $name
* @param mixed $amount
* @param bool $taxable (default: false)
* @param string $tax_class (default: '')
* @param string $name Unique name for the fee. Multiple fees of the same name cannot be added.
* @param float $amount Fee amount.
* @param bool $taxable (default: false) Is the fee taxable?
* @param string $tax_class (default: '') The tax class for the fee if taxable. A blank string is standard tax class.
*/
public function add_fee( $name, $amount, $taxable = false, $tax_class = '' ) {

22
includes/class-wc-cli.php Normal file
View File

@ -0,0 +1,22 @@
<?php
/**
* Manage WooCommerce from CLI.
*
* @class WC_CLI
* @version 2.5.0
* @package WooCommerce/CLI
* @category CLI
* @author WooThemes
*/
class WC_CLI extends WP_CLI_Command {
}
WP_CLI::add_command( 'wc', 'WC_CLI' );
WP_CLI::add_command( 'wc coupon', 'WC_CLI_Coupon' );
WP_CLI::add_command( 'wc customer', 'WC_CLI_Customer' );
WP_CLI::add_command( 'wc order', 'WC_CLI_Order' );
WP_CLI::add_command( 'wc product', 'WC_CLI_Product' );
WP_CLI::add_command( 'wc product category', 'WC_CLI_Product_Category' );
WP_CLI::add_command( 'wc report', 'WC_CLI_Report' );
WP_CLI::add_command( 'wc tool', 'WC_CLI_Tool' );

View File

@ -250,6 +250,7 @@ class WC_Countries {
if ( 'eu_vat' === $type ) {
$countries[] = 'MC';
$countries[] = 'IM';
$countries[] = 'CH';
}
return $countries;

Some files were not shown because too many files have changed in this diff Show More