Dokan – Best WooCommerce Multivendor Marketplace Solution – Build Your Own Amazon, eBay, Etsy - Version 2.7.8

Version Description

Download this release

Release Info

Developer sabbir1991
Plugin Icon wp plugin Dokan – Best WooCommerce Multivendor Marketplace Solution – Build Your Own Amazon, eBay, Etsy
Version 2.7.8
Comparing to
See all releases

Code changes from version 2.6.10 to 2.7.8

Files changed (66) hide show
  1. assets/css/admin.css +18 -0
  2. assets/css/style.css +20 -17
  3. assets/js/dokan-admin.js +14 -0
  4. assets/js/dokan.js +69 -22
  5. assets/js/speakingurl.min.js +7 -0
  6. classes/admin-user-profile.php +129 -41
  7. classes/admin-withdraw.php +62 -49
  8. classes/ajax.php +37 -113
  9. classes/installer.php +66 -18
  10. classes/pageviews.php +230 -20
  11. classes/rewrites.php +10 -2
  12. classes/seller-setup-wizard.php +10 -11
  13. classes/template-dashboard.php +15 -2
  14. classes/template-orders.php +13 -3
  15. classes/template-products.php +14 -7
  16. classes/template-settings.php +34 -14
  17. classes/template-shortcodes.php +33 -5
  18. classes/template-withdraw.php +54 -8
  19. classes/upgrade.php +2 -0
  20. classes/withdraw.php +5 -0
  21. dokan.php +13 -14
  22. includes/admin-functions.php +89 -25
  23. includes/admin/class-admin-pointers.php +1 -1
  24. includes/admin/class-admin.php +30 -12
  25. includes/admin/class-ajax.php +5 -2
  26. includes/admin/class-settings.php +2 -0
  27. includes/admin/setup-wizard.php +3 -4
  28. includes/admin/views/help.php +1 -1
  29. includes/class-core.php +7 -4
  30. includes/class-scripts.php +42 -31
  31. includes/class-vendor.php +1 -1
  32. includes/functions.php +210 -52
  33. includes/order-functions.php +45 -13
  34. includes/product-functions.php +60 -0
  35. includes/reports.php +4 -2
  36. includes/template-tags.php +75 -32
  37. includes/upgrades/dokan-upgrade-2.7.3.php +82 -0
  38. includes/upgrades/dokan-upgrade-2.7.6.php +59 -0
  39. includes/wc-crud-functions.php +9 -3
  40. includes/wc-functions.php +154 -132
  41. includes/wc-template.php +73 -0
  42. includes/widgets/store-contact.php +26 -16
  43. includes/widgets/store-menu-category.php +4 -2
  44. includes/widgets/store-menu.php +10 -1
  45. includes/withdraw-functions.php +24 -1
  46. languages/dokan-lite.pot +647 -589
  47. lib/class-wedevs-insights.php +11 -11
  48. lib/class-weforms-upsell.php +0 -412
  49. lib/class.settings-api.php +39 -17
  50. package-lock.json +0 -3687
  51. readme.txt +612 -525
  52. templates/dashboard/big-counter-widget.php +1 -5
  53. templates/global/no-permission.php +78 -0
  54. templates/orders/date-export.php +3 -0
  55. templates/orders/details.php +48 -39
  56. templates/orders/downloadable.php +1 -1
  57. templates/orders/listing.php +51 -43
  58. templates/products/listing-filter.php +1 -1
  59. templates/products/new-product-single.php +6 -6
  60. templates/products/new-product.php +2 -2
  61. templates/products/products-listing.php +40 -18
  62. templates/settings/header.php +1 -1
  63. templates/settings/store-form.php +12 -10
  64. templates/store-header.php +2 -0
  65. templates/store.php +0 -1
  66. templates/withdraw/request-form.php +8 -0
assets/css/admin.css CHANGED
@@ -163,6 +163,24 @@
163
  padding-top: 2px;
164
  margin-right: 5px;
165
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
166
  .dokan-settings-wrap h2.nav-tab-wrapper {
167
  flex: 1;
168
  border-bottom: none;
163
  padding-top: 2px;
164
  margin-right: 5px;
165
  }
166
+ .dokan-settings-wrap .dashicons.dashicons-admin-generic {
167
+ color: #6c75ff;
168
+ }
169
+ .dokan-settings-wrap .dashicons.dashicons-cart {
170
+ color: #00aeff;
171
+ }
172
+ .dokan-settings-wrap .dashicons.dashicons-money {
173
+ color: #d35400;
174
+ }
175
+ .dokan-settings-wrap .dashicons.dashicons-admin-page {
176
+ color: #8e44ad;
177
+ }
178
+ .dokan-settings-wrap .dashicons.dashicons-admin-appearance {
179
+ color: #3498db;
180
+ }
181
+ .dokan-settings-wrap .dashicons.dashicons-networking {
182
+ color: #1abc9c;
183
+ }
184
  .dokan-settings-wrap h2.nav-tab-wrapper {
185
  flex: 1;
186
  border-bottom: none;
assets/css/style.css CHANGED
@@ -2339,14 +2339,16 @@ div.media-sidebar a.edit-attachment {
2339
  margin-bottom: 15px;
2340
  }
2341
  .dokan-product-listing .dokan-product-listing-area .product-listing-top ul.dokan-listing-filter {
2342
- width: 70%;
2343
  }
2344
  .dokan-product-listing .dokan-product-listing-area .product-listing-top ul.dokan-listing-filter li {
2345
  display: inline-block;
2346
  padding: 0px 10px 0px 0px;
2347
  }
2348
  .dokan-product-listing .dokan-product-listing-area .product-listing-top span.dokan-add-product-link {
2349
- width: 30%;
 
 
2350
  }
2351
  .dokan-product-listing .dokan-product-listing-area form.dokan-product-search-form button[name="product_listing_search"] {
2352
  float: right;
@@ -2452,32 +2454,29 @@ div.media-sidebar a.edit-attachment {
2452
  .dokan-product-edit-area .featured-image {
2453
  width: 35%;
2454
  }
2455
- .product-edit-new-container .dokan-edit-row {
2456
  background: #fff;
2457
  border: 1px solid #EBEBEB;
2458
  margin-top: 15px;
2459
  }
2460
- .product-edit-new-container .dokan-edit-row.dokan-other-options {
2461
- margin-bottom: 20px;
2462
- }
2463
- .product-edit-new-container .dokan-edit-row .dokan-section-heading {
2464
  padding: 10px 15px;
2465
  border-bottom: 1px solid #EBEBEB;
2466
  overflow: hidden;
2467
  cursor: pointer;
2468
  }
2469
- .product-edit-new-container .dokan-edit-row .dokan-section-heading i.fa {
2470
  font-size: 15px;
2471
  }
2472
- .product-edit-new-container .dokan-edit-row .dokan-section-heading i.fa.fa-flip-vertical {
2473
  margin-top: 9px;
2474
  }
2475
- .product-edit-new-container .dokan-edit-row .dokan-section-heading .dokan-section-toggle {
2476
  float: right;
2477
  color: #888;
2478
  font-size: 15px;
2479
  }
2480
- .product-edit-new-container .dokan-edit-row .dokan-section-heading h2 {
2481
  margin: 0px;
2482
  padding: 0px;
2483
  float: left;
@@ -2485,7 +2484,7 @@ div.media-sidebar a.edit-attachment {
2485
  font-weight: bold;
2486
  line-height: 150%;
2487
  }
2488
- .product-edit-new-container .dokan-edit-row .dokan-section-heading p {
2489
  float: left;
2490
  vertical-align: bottom;
2491
  margin-bottom: 0px;
@@ -2495,6 +2494,9 @@ div.media-sidebar a.edit-attachment {
2495
  font-style: italic;
2496
  font-size: 12px;
2497
  }
 
 
 
2498
  .product-edit-new-container .dokan-edit-row .dokan-section-content {
2499
  padding: 15px;
2500
  }
@@ -2868,10 +2870,10 @@ div.media-sidebar a.edit-attachment {
2868
  .product-edit-new-container .dokan-attribute-variation-options .dokan-product-variation-wrapper .dokan-variations-container .dokan-product-variation-itmes .dokan-variable-attributes .weight-dimension {
2869
  margin-bottom: 10px;
2870
  }
2871
- .product-edit-new-container .dokan-attribute-variation-options .dokan-product-variation-wrapper .dokan-variations-container .dokan-product-variation-itmes .dokan-variable-attributes .weight-dimension .dimensions_field .doakn-w3 {
2872
  margin-right: 6px;
2873
  }
2874
- .product-edit-new-container .dokan-attribute-variation-options .dokan-product-variation-wrapper .dokan-variations-container .dokan-product-variation-itmes .dokan-variable-attributes .weight-dimension .dimensions_field .doakn-w3:last-child {
2875
  margin-right: 0px;
2876
  }
2877
  .product-edit-new-container .dokan-attribute-variation-options .dokan-product-variation-wrapper .dokan-variation-default-toolbar {
@@ -3209,7 +3211,6 @@ div.media-sidebar a.edit-attachment {
3209
  height: 100%;
3210
  color: #afafaf;
3211
  font-size: 18px;
3212
- display: block;
3213
  }
3214
  .product-edit-container #dokan-product-images ul.product_images li.image img,
3215
  .product-edit-container #dokan-product-images ul.product_images li.dokan-sortable-placeholder img,
@@ -3419,7 +3420,6 @@ div.media-sidebar a.edit-attachment {
3419
  height: 100%;
3420
  color: #afafaf;
3421
  font-size: 18px;
3422
- display: block;
3423
  }
3424
  .dokan-add-new-product-popup #dokan-product-images ul.product_images li.image img,
3425
  .dokan-add-new-product-popup #dokan-product-images ul.product_images li.dokan-sortable-placeholder img,
@@ -3467,7 +3467,7 @@ div.media-sidebar a.edit-attachment {
3467
  margin-top: 10px;
3468
  }
3469
  .dokan-add-new-product-popup .product-container-footer {
3470
- padding: 10px 20px;
3471
  border-top: 1px solid #eee;
3472
  text-align: right;
3473
  }
@@ -3480,6 +3480,9 @@ div.media-sidebar a.edit-attachment {
3480
  color: #d9534f;
3481
  margin-right: 8px;
3482
  vertical-align: middle;
 
 
 
3483
  }
3484
  .dokan-settings-content .dokan-settings-area h1 {
3485
  margin: 0px;
2339
  margin-bottom: 15px;
2340
  }
2341
  .dokan-product-listing .dokan-product-listing-area .product-listing-top ul.dokan-listing-filter {
2342
+ width: 60%;
2343
  }
2344
  .dokan-product-listing .dokan-product-listing-area .product-listing-top ul.dokan-listing-filter li {
2345
  display: inline-block;
2346
  padding: 0px 10px 0px 0px;
2347
  }
2348
  .dokan-product-listing .dokan-product-listing-area .product-listing-top span.dokan-add-product-link {
2349
+ width: 36%;
2350
+ float: right;
2351
+ text-align: right;
2352
  }
2353
  .dokan-product-listing .dokan-product-listing-area form.dokan-product-search-form button[name="product_listing_search"] {
2354
  float: right;
2454
  .dokan-product-edit-area .featured-image {
2455
  width: 35%;
2456
  }
2457
+ .dokan-edit-row {
2458
  background: #fff;
2459
  border: 1px solid #EBEBEB;
2460
  margin-top: 15px;
2461
  }
2462
+ .dokan-edit-row .dokan-section-heading {
 
 
 
2463
  padding: 10px 15px;
2464
  border-bottom: 1px solid #EBEBEB;
2465
  overflow: hidden;
2466
  cursor: pointer;
2467
  }
2468
+ .dokan-edit-row .dokan-section-heading i.fa {
2469
  font-size: 15px;
2470
  }
2471
+ .dokan-edit-row .dokan-section-heading i.fa.fa-flip-vertical {
2472
  margin-top: 9px;
2473
  }
2474
+ .dokan-edit-row .dokan-section-heading .dokan-section-toggle {
2475
  float: right;
2476
  color: #888;
2477
  font-size: 15px;
2478
  }
2479
+ .dokan-edit-row .dokan-section-heading h2 {
2480
  margin: 0px;
2481
  padding: 0px;
2482
  float: left;
2484
  font-weight: bold;
2485
  line-height: 150%;
2486
  }
2487
+ .dokan-edit-row .dokan-section-heading p {
2488
  float: left;
2489
  vertical-align: bottom;
2490
  margin-bottom: 0px;
2494
  font-style: italic;
2495
  font-size: 12px;
2496
  }
2497
+ .product-edit-new-container .dokan-edit-row.dokan-other-options {
2498
+ margin-bottom: 20px;
2499
+ }
2500
  .product-edit-new-container .dokan-edit-row .dokan-section-content {
2501
  padding: 15px;
2502
  }
2870
  .product-edit-new-container .dokan-attribute-variation-options .dokan-product-variation-wrapper .dokan-variations-container .dokan-product-variation-itmes .dokan-variable-attributes .weight-dimension {
2871
  margin-bottom: 10px;
2872
  }
2873
+ .product-edit-new-container .dokan-attribute-variation-options .dokan-product-variation-wrapper .dokan-variations-container .dokan-product-variation-itmes .dokan-variable-attributes .weight-dimension .dimensions_field .dokan-w3 {
2874
  margin-right: 6px;
2875
  }
2876
+ .product-edit-new-container .dokan-attribute-variation-options .dokan-product-variation-wrapper .dokan-variations-container .dokan-product-variation-itmes .dokan-variable-attributes .weight-dimension .dimensions_field .dokan-w3:last-child {
2877
  margin-right: 0px;
2878
  }
2879
  .product-edit-new-container .dokan-attribute-variation-options .dokan-product-variation-wrapper .dokan-variation-default-toolbar {
3211
  height: 100%;
3212
  color: #afafaf;
3213
  font-size: 18px;
 
3214
  }
3215
  .product-edit-container #dokan-product-images ul.product_images li.image img,
3216
  .product-edit-container #dokan-product-images ul.product_images li.dokan-sortable-placeholder img,
3420
  height: 100%;
3421
  color: #afafaf;
3422
  font-size: 18px;
 
3423
  }
3424
  .dokan-add-new-product-popup #dokan-product-images ul.product_images li.image img,
3425
  .dokan-add-new-product-popup #dokan-product-images ul.product_images li.dokan-sortable-placeholder img,
3467
  margin-top: 10px;
3468
  }
3469
  .dokan-add-new-product-popup .product-container-footer {
3470
+ padding: 20px 20px;
3471
  border-top: 1px solid #eee;
3472
  text-align: right;
3473
  }
3480
  color: #d9534f;
3481
  margin-right: 8px;
3482
  vertical-align: middle;
3483
+ float: left;
3484
+ display: block;
3485
+ width: 55%;
3486
  }
3487
  .dokan-settings-content .dokan-settings-area h1 {
3488
  margin: 0px;
assets/js/dokan-admin.js CHANGED
@@ -61,5 +61,19 @@ jQuery(function($) {
61
 
62
  btn.parents('.dokan-settings-radio-image').addClass('active').removeClass('not-active');
63
  });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
64
  });
65
 
61
 
62
  btn.parents('.dokan-settings-radio-image').addClass('active').removeClass('not-active');
63
  });
64
+
65
+ $(function(){
66
+ $('#the-list').on('click', '.editinline', function(){
67
+ var post_id = $(this).closest('tr').attr('id');
68
+
69
+ post_id = post_id.replace("post-", "");
70
+
71
+ var $vendor_id_inline_data = $('#dokan_vendor_id_inline_' + post_id).find('#dokan_vendor_id').text(),
72
+ $wc_inline_data = $('#woocommerce_inline_' + post_id );
73
+
74
+ $( 'select[name="dokan_product_author_override"] option:selected', '.inline-edit-row' ).attr( 'selected', false ).change();
75
+ $( 'select[name="dokan_product_author_override"] option[value="' + $vendor_id_inline_data + '"]' ).attr( 'selected', 'selected' ).change();
76
+ });
77
+ });
78
  });
79
 
assets/js/dokan.js CHANGED
@@ -26,11 +26,15 @@ jQuery(function($) {
26
  $.post( dokan.ajaxurl, self.serialize(), function(response) {
27
  li.unblock();
28
 
29
- var prev_li = li.prev();
 
30
 
31
- li.addClass('dokan-hide');
32
- prev_li.find('label').replaceWith(response);
33
- prev_li.find('a.dokan-edit-status').removeClass('dokan-hide');
 
 
 
34
  });
35
  });
36
 
@@ -656,15 +660,18 @@ jQuery(function($) {
656
  form.find( 'span.dokan-show-add-product-error' ).html('');
657
  form.find( 'span.dokan-add-new-product-spinner' ).css( 'display', 'inline-block' );
658
 
 
659
 
660
  if ( form.find( 'input[name="post_title"]' ).val() == '' ) {
661
  $( 'span.dokan-show-add-product-error' ).html( dokan.product_title_required );
 
662
  form.find( 'span.dokan-add-new-product-spinner' ).css( 'display', 'none' );
663
  return;
664
  }
665
 
666
  if ( form.find( 'select[name="product_cat"]' ).val() == '-1' ) {
667
  $( 'span.dokan-show-add-product-error' ).html( dokan.product_category_required );
 
668
  form.find( 'span.dokan-add-new-product-spinner' ).css( 'display', 'none' );
669
  return;
670
  }
@@ -677,6 +684,7 @@ jQuery(function($) {
677
 
678
  $.post( dokan.ajaxurl, data, function( resp ) {
679
  if ( resp.success ) {
 
680
  if ( btn_id == 'create_new' ) {
681
  $.magnificPopup.close();
682
  window.location.href = resp.data;
@@ -686,6 +694,7 @@ jQuery(function($) {
686
  Dokan_Editor.openProductPopup();
687
  }
688
  } else {
 
689
  $( 'span.dokan-show-add-product-error' ).html( resp.data );
690
  }
691
  form.find( 'span.dokan-add-new-product-spinner' ).css( 'display', 'none' );
@@ -1096,6 +1105,7 @@ jQuery(function($) {
1096
 
1097
  // wrap.find('img').attr('src', attachment.sizes.thumbnail.url);
1098
  wrap.find('img').attr('src', attachment.url);
 
1099
 
1100
  instruction.addClass('dokan-hide');
1101
  wrap.removeClass('dokan-hide');
@@ -1270,31 +1280,67 @@ jQuery(function($) {
1270
  $( "input.dokan-product-regular-price, input.dokan-product-sales-price" ).on( 'keyup', function () {
1271
  if ( dokan.commission_type == 'percentage' ) {
1272
  if ( $('input.dokan-product-sales-price' ).val() == '' ) {
1273
- $( 'span.vendor-price' ).html( ( $( 'input.dokan-product-regular-price' ).val() * dokan.vendor_percentage ) / 100 );
 
 
 
 
1274
  } else {
1275
- $( 'span.vendor-price' ).html( ( $( 'input.dokan-product-sales-price' ).val() * dokan.vendor_percentage ) / 100 );
1276
- }
 
 
 
 
1277
  } else {
 
1278
  if ( $('input.dokan-product-sales-price' ).val() == '' ) {
1279
- $( 'span.vendor-price' ).html( ( $( 'input.dokan-product-regular-price' ).val() - dokan.vendor_percentage ) );
 
 
 
 
1280
  } else {
1281
- $( 'span.vendor-price' ).html( ( $( 'input.dokan-product-sales-price' ).val() - dokan.vendor_percentage ) );
1282
- }
 
 
 
 
1283
  }
1284
 
1285
- if ( Number( $('span.vendor-price').text() ) < 0 ) {
1286
- $( $('.dokan-product-less-price-alert').removeClass('dokan-hide') );
1287
- $( 'input[type=submit]' ).attr( 'disabled', 'disabled' );
1288
- } else {
1289
- $( 'input[type=submit]' ).removeAttr( 'disabled');
1290
- $( $('.dokan-product-less-price-alert').addClass('dokan-hide') );
 
 
1291
  }
1292
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1293
  } ).trigger('keyup');
1294
 
1295
  });
1296
 
1297
  })(jQuery);
 
1298
  jQuery(function($) {
1299
  var api = wp.customize;
1300
 
@@ -1391,7 +1437,8 @@ jQuery(function($) {
1391
  }
1392
 
1393
  $('#company-name').on('focusout', function() {
1394
- var value = $(this).val().toLowerCase().replace(/-+/g, '').replace(/\s+/g, '-').replace(/[^a-z0-9-]/g, '');
 
1395
  $('#seller-url').val(value);
1396
  $('#url-alart').text( value );
1397
  $('#seller-url').focus();
@@ -1453,12 +1500,12 @@ jQuery(function($) {
1453
 
1454
  $.post( dokan.ajaxurl, data, function(resp) {
1455
 
1456
- if ( resp == 0){
1457
- $('#url-alart').removeClass('text-success').addClass('text-danger');
1458
- $('#url-alart-mgs').removeClass('text-success').addClass('text-danger').text(dokan.seller.notAvailable);
1459
- } else {
1460
  $('#url-alart').removeClass('text-danger').addClass('text-success');
1461
  $('#url-alart-mgs').removeClass('text-danger').addClass('text-success').text(dokan.seller.available);
 
 
 
1462
  }
1463
 
1464
  row.unblock();
@@ -2044,4 +2091,4 @@ jQuery(function($) {
2044
  }
2045
  });
2046
 
2047
- })(jQuery);
26
  $.post( dokan.ajaxurl, self.serialize(), function(response) {
27
  li.unblock();
28
 
29
+ if ( response.success ) {
30
+ var prev_li = li.prev();
31
 
32
+ li.addClass('dokan-hide');
33
+ prev_li.find('label').replaceWith(response.data);
34
+ prev_li.find('a.dokan-edit-status').removeClass('dokan-hide');
35
+ } else {
36
+ alert( response.data );
37
+ }
38
  });
39
  });
40
 
660
  form.find( 'span.dokan-show-add-product-error' ).html('');
661
  form.find( 'span.dokan-add-new-product-spinner' ).css( 'display', 'inline-block' );
662
 
663
+ self.attr( 'disabled', 'disabled' );
664
 
665
  if ( form.find( 'input[name="post_title"]' ).val() == '' ) {
666
  $( 'span.dokan-show-add-product-error' ).html( dokan.product_title_required );
667
+ self.removeAttr( 'disabled' );
668
  form.find( 'span.dokan-add-new-product-spinner' ).css( 'display', 'none' );
669
  return;
670
  }
671
 
672
  if ( form.find( 'select[name="product_cat"]' ).val() == '-1' ) {
673
  $( 'span.dokan-show-add-product-error' ).html( dokan.product_category_required );
674
+ self.removeAttr( 'disabled' );
675
  form.find( 'span.dokan-add-new-product-spinner' ).css( 'display', 'none' );
676
  return;
677
  }
684
 
685
  $.post( dokan.ajaxurl, data, function( resp ) {
686
  if ( resp.success ) {
687
+ self.removeAttr( 'disabled' );
688
  if ( btn_id == 'create_new' ) {
689
  $.magnificPopup.close();
690
  window.location.href = resp.data;
694
  Dokan_Editor.openProductPopup();
695
  }
696
  } else {
697
+ self.removeAttr( 'disabled' );
698
  $( 'span.dokan-show-add-product-error' ).html( resp.data );
699
  }
700
  form.find( 'span.dokan-add-new-product-spinner' ).css( 'display', 'none' );
1105
 
1106
  // wrap.find('img').attr('src', attachment.sizes.thumbnail.url);
1107
  wrap.find('img').attr('src', attachment.url);
1108
+ wrap.find('img').removeAttr( 'srcset' );
1109
 
1110
  instruction.addClass('dokan-hide');
1111
  wrap.removeClass('dokan-hide');
1280
  $( "input.dokan-product-regular-price, input.dokan-product-sales-price" ).on( 'keyup', function () {
1281
  if ( dokan.commission_type == 'percentage' ) {
1282
  if ( $('input.dokan-product-sales-price' ).val() == '' ) {
1283
+ $( 'span.vendor-price' ).html(
1284
+ parseFloat( accounting.formatNumber( ( ( $( 'input.dokan-product-regular-price' ).val() * dokan.vendor_percentage ) / 100 ), dokan.rounding_precision, '' ) )
1285
+ .toString()
1286
+ .replace( '.', dokan.mon_decimal_point )
1287
+ );
1288
  } else {
1289
+ $( 'span.vendor-price' ).html(
1290
+ parseFloat( accounting.formatNumber( ( ( $( 'input.dokan-product-sales-price' ).val() * dokan.vendor_percentage ) / 100 ), dokan.rounding_precision, '' ) )
1291
+ .toString()
1292
+ .replace( '.', dokan.mon_decimal_point )
1293
+ );
1294
+ }
1295
  } else {
1296
+
1297
  if ( $('input.dokan-product-sales-price' ).val() == '' ) {
1298
+ $( 'span.vendor-price' ).html(
1299
+ parseFloat( accounting.formatNumber( ( $( 'input.dokan-product-regular-price' ).val() - ( 100 - dokan.vendor_percentage ) ), dokan.rounding_precision, '' ) )
1300
+ .toString()
1301
+ .replace( '.', dokan.mon_decimal_point )
1302
+ );
1303
  } else {
1304
+ $( 'span.vendor-price' ).html(
1305
+ parseFloat( accounting.formatNumber( ( $( 'input.dokan-product-sales-price' ).val() - ( 100 - dokan.vendor_percentage ) ), dokan.rounding_precision, '' ) )
1306
+ .toString()
1307
+ .replace( '.', dokan.mon_decimal_point )
1308
+ );
1309
+ }
1310
  }
1311
 
1312
+ if ( $( '#product_type' ).val() == 'simple' ) {
1313
+ if ( Number( $('span.vendor-price').text() ) < 0 ) {
1314
+ $( $('.dokan-product-less-price-alert').removeClass('dokan-hide') );
1315
+ $( 'input[type=submit]' ).attr( 'disabled', 'disabled' );
1316
+ } else {
1317
+ $( 'input[type=submit]' ).removeAttr( 'disabled');
1318
+ $( $('.dokan-product-less-price-alert').addClass('dokan-hide') );
1319
+ }
1320
  }
1321
 
1322
+ $( '#product_type' ).on( 'change', function() {
1323
+ var self = $(this);
1324
+
1325
+ if ( self.val() == 'variable' || self.val() == 'grouped' ) {
1326
+ $( 'input[type=submit]' ).removeAttr( 'disabled' );
1327
+ } else {
1328
+ if ( Number( $('span.vendor-price').text() ) > 0 ) {
1329
+ $( 'input[type=submit]' ).removeAttr( 'disabled');
1330
+ $( $('.dokan-product-less-price-alert').addClass('dokan-hide') );
1331
+ } else {
1332
+ $( $('.dokan-product-less-price-alert').removeClass('dokan-hide') );
1333
+ $( 'input[type=submit]' ).attr( 'disabled', 'disabled' );
1334
+ }
1335
+ }
1336
+ } );
1337
+
1338
  } ).trigger('keyup');
1339
 
1340
  });
1341
 
1342
  })(jQuery);
1343
+
1344
  jQuery(function($) {
1345
  var api = wp.customize;
1346
 
1437
  }
1438
 
1439
  $('#company-name').on('focusout', function() {
1440
+ var value = getSlug( $(this).val() );
1441
+
1442
  $('#seller-url').val(value);
1443
  $('#url-alart').text( value );
1444
  $('#seller-url').focus();
1500
 
1501
  $.post( dokan.ajaxurl, data, function(resp) {
1502
 
1503
+ if ( resp.success === true ) {
 
 
 
1504
  $('#url-alart').removeClass('text-danger').addClass('text-success');
1505
  $('#url-alart-mgs').removeClass('text-danger').addClass('text-success').text(dokan.seller.available);
1506
+ } else {
1507
+ $('#url-alart').removeClass('text-success').addClass('text-danger');
1508
+ $('#url-alart-mgs').removeClass('text-success').addClass('text-danger').text(dokan.seller.notAvailable);
1509
  }
1510
 
1511
  row.unblock();
2091
  }
2092
  });
2093
 
2094
+ })(jQuery);
assets/js/speakingurl.min.js ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ /**
2
+ * speakingurl
3
+ * @version v14.0.1
4
+ * @link http://pid.github.io/speakingurl/
5
+ * @license BSD
6
+ * @author
7
+ */!function(a){"use strict";var e={"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"Ae","Å":"A","Æ":"AE","Ç":"C","È":"E","É":"E","Ê":"E","Ë":"E","Ì":"I","Í":"I","Î":"I","Ï":"I","Ð":"D","Ñ":"N","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"Oe","Ő":"O","Ø":"O","Ù":"U","Ú":"U","Û":"U","Ü":"Ue","Ű":"U","Ý":"Y","Þ":"TH","ß":"ss","à":"a","á":"a","â":"a","ã":"a","ä":"ae","å":"a","æ":"ae","ç":"c","è":"e","é":"e","ê":"e","ë":"e","ì":"i","í":"i","î":"i","ï":"i","ð":"d","ñ":"n","ò":"o","ó":"o","ô":"o","õ":"o","ö":"oe","ő":"o","ø":"o","ù":"u","ú":"u","û":"u","ü":"ue","ű":"u","ý":"y","þ":"th","ÿ":"y","ẞ":"SS","ا":"a","أ":"a","إ":"i","آ":"aa","ؤ":"u","ئ":"e","ء":"a","ب":"b","ت":"t","ث":"th","ج":"j","ح":"h","خ":"kh","د":"d","ذ":"th","ر":"r","ز":"z","س":"s","ش":"sh","ص":"s","ض":"dh","ط":"t","ظ":"z","ع":"a","غ":"gh","ف":"f","ق":"q","ك":"k","ل":"l","م":"m","ن":"n","ه":"h","و":"w","ي":"y","ى":"a","ة":"h","ﻻ":"la","ﻷ":"laa","ﻹ":"lai","ﻵ":"laa","گ":"g","چ":"ch","پ":"p","ژ":"zh","ک":"k","ی":"y","َ":"a","ً":"an","ِ":"e","ٍ":"en","ُ":"u","ٌ":"on","ْ":"","٠":"0","١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","۰":"0","۱":"1","۲":"2","۳":"3","۴":"4","۵":"5","۶":"6","۷":"7","۸":"8","۹":"9","က":"k","ခ":"kh","ဂ":"g","ဃ":"ga","င":"ng","စ":"s","ဆ":"sa","ဇ":"z","စျ":"za","ည":"ny","ဋ":"t","ဌ":"ta","ဍ":"d","ဎ":"da","ဏ":"na","တ":"t","ထ":"ta","ဒ":"d","ဓ":"da","န":"n","ပ":"p","ဖ":"pa","ဗ":"b","ဘ":"ba","မ":"m","ယ":"y","ရ":"ya","လ":"l","ဝ":"w","သ":"th","ဟ":"h","ဠ":"la","အ":"a","ြ":"y","ျ":"ya","ွ":"w","ြွ":"yw","ျွ":"ywa","ှ":"h","ဧ":"e","၏":"-e","ဣ":"i","ဤ":"-i","ဉ":"u","ဦ":"-u","ဩ":"aw","သြော":"aw","ဪ":"aw","၀":"0","၁":"1","၂":"2","၃":"3","၄":"4","၅":"5","၆":"6","၇":"7","၈":"8","၉":"9","္":"","့":"","း":"","č":"c","ď":"d","ě":"e","ň":"n","ř":"r","š":"s","ť":"t","ů":"u","ž":"z","Č":"C","Ď":"D","Ě":"E","Ň":"N","Ř":"R","Š":"S","Ť":"T","Ů":"U","Ž":"Z","ހ":"h","ށ":"sh","ނ":"n","ރ":"r","ބ":"b","ޅ":"lh","ކ":"k","އ":"a","ވ":"v","މ":"m","ފ":"f","ދ":"dh","ތ":"th","ލ":"l","ގ":"g","ޏ":"gn","ސ":"s","ޑ":"d","ޒ":"z","ޓ":"t","ޔ":"y","ޕ":"p","ޖ":"j","ޗ":"ch","ޘ":"tt","ޙ":"hh","ޚ":"kh","ޛ":"th","ޜ":"z","ޝ":"sh","ޞ":"s","ޟ":"d","ޠ":"t","ޡ":"z","ޢ":"a","ޣ":"gh","ޤ":"q","ޥ":"w","ަ":"a","ާ":"aa","ި":"i","ީ":"ee","ު":"u","ޫ":"oo","ެ":"e","ޭ":"ey","ޮ":"o","ޯ":"oa","ް":"","ა":"a","ბ":"b","გ":"g","დ":"d","ე":"e","ვ":"v","ზ":"z","თ":"t","ი":"i","კ":"k","ლ":"l","მ":"m","ნ":"n","ო":"o","პ":"p","ჟ":"zh","რ":"r","ს":"s","ტ":"t","უ":"u","ფ":"p","ქ":"k","ღ":"gh","ყ":"q","შ":"sh","ჩ":"ch","ც":"ts","ძ":"dz","წ":"ts","ჭ":"ch","ხ":"kh","ჯ":"j","ჰ":"h","α":"a","β":"v","γ":"g","δ":"d","ε":"e","ζ":"z","η":"i","θ":"th","ι":"i","κ":"k","λ":"l","μ":"m","ν":"n","ξ":"ks","ο":"o","π":"p","ρ":"r","σ":"s","τ":"t","υ":"y","φ":"f","χ":"x","ψ":"ps","ω":"o","ά":"a","έ":"e","ί":"i","ό":"o","ύ":"y","ή":"i","ώ":"o","ς":"s","ϊ":"i","ΰ":"y","ϋ":"y","ΐ":"i","Α":"A","Β":"B","Γ":"G","Δ":"D","Ε":"E","Ζ":"Z","Η":"I","Θ":"TH","Ι":"I","Κ":"K","Λ":"L","Μ":"M","Ν":"N","Ξ":"KS","Ο":"O","Π":"P","Ρ":"R","Σ":"S","Τ":"T","Υ":"Y","Φ":"F","Χ":"X","Ψ":"PS","Ω":"O","Ά":"A","Έ":"E","Ί":"I","Ό":"O","Ύ":"Y","Ή":"I","Ώ":"O","Ϊ":"I","Ϋ":"Y","ā":"a","ē":"e","ģ":"g","ī":"i","ķ":"k","ļ":"l","ņ":"n","ū":"u","Ā":"A","Ē":"E","Ģ":"G","Ī":"I","Ķ":"k","Ļ":"L","Ņ":"N","Ū":"U","Ќ":"Kj","ќ":"kj","Љ":"Lj","љ":"lj","Њ":"Nj","њ":"nj","Тс":"Ts","тс":"ts","ą":"a","ć":"c","ę":"e","ł":"l","ń":"n","ś":"s","ź":"z","ż":"z","Ą":"A","Ć":"C","Ę":"E","Ł":"L","Ń":"N","Ś":"S","Ź":"Z","Ż":"Z","Є":"Ye","І":"I","Ї":"Yi","Ґ":"G","є":"ye","і":"i","ї":"yi","ґ":"g","ă":"a","Ă":"A","ș":"s","Ș":"S","ț":"t","Ț":"T","ţ":"t","Ţ":"T","а":"a","б":"b","в":"v","г":"g","д":"d","е":"e","ё":"yo","ж":"zh","з":"z","и":"i","й":"i","к":"k","л":"l","м":"m","н":"n","о":"o","п":"p","р":"r","с":"s","т":"t","у":"u","ф":"f","х":"kh","ц":"c","ч":"ch","ш":"sh","щ":"sh","ъ":"","ы":"y","ь":"","э":"e","ю":"yu","я":"ya","А":"A","Б":"B","В":"V","Г":"G","Д":"D","Е":"E","Ё":"Yo","Ж":"Zh","З":"Z","И":"I","Й":"I","К":"K","Л":"L","М":"M","Н":"N","О":"O","П":"P","Р":"R","С":"S","Т":"T","У":"U","Ф":"F","Х":"Kh","Ц":"C","Ч":"Ch","Ш":"Sh","Щ":"Sh","Ъ":"","Ы":"Y","Ь":"","Э":"E","Ю":"Yu","Я":"Ya","ђ":"dj","ј":"j","ћ":"c","џ":"dz","Ђ":"Dj","Ј":"j","Ћ":"C","Џ":"Dz","ľ":"l","ĺ":"l","ŕ":"r","Ľ":"L","Ĺ":"L","Ŕ":"R","ş":"s","Ş":"S","ı":"i","İ":"I","ğ":"g","Ğ":"G","ả":"a","Ả":"A","ẳ":"a","Ẳ":"A","ẩ":"a","Ẩ":"A","đ":"d","Đ":"D","ẹ":"e","Ẹ":"E","ẽ":"e","Ẽ":"E","ẻ":"e","Ẻ":"E","ế":"e","Ế":"E","ề":"e","Ề":"E","ệ":"e","Ệ":"E","ễ":"e","Ễ":"E","ể":"e","Ể":"E","ỏ":"o","ọ":"o","Ọ":"o","ố":"o","Ố":"O","ồ":"o","Ồ":"O","ổ":"o","Ổ":"O","ộ":"o","Ộ":"O","ỗ":"o","Ỗ":"O","ơ":"o","Ơ":"O","ớ":"o","Ớ":"O","ờ":"o","Ờ":"O","ợ":"o","Ợ":"O","ỡ":"o","Ỡ":"O","Ở":"o","ở":"o","ị":"i","Ị":"I","ĩ":"i","Ĩ":"I","ỉ":"i","Ỉ":"i","ủ":"u","Ủ":"U","ụ":"u","Ụ":"U","ũ":"u","Ũ":"U","ư":"u","Ư":"U","ứ":"u","Ứ":"U","ừ":"u","Ừ":"U","ự":"u","Ự":"U","ữ":"u","Ữ":"U","ử":"u","Ử":"ư","ỷ":"y","Ỷ":"y","ỳ":"y","Ỳ":"Y","ỵ":"y","Ỵ":"Y","ỹ":"y","Ỹ":"Y","ạ":"a","Ạ":"A","ấ":"a","Ấ":"A","ầ":"a","Ầ":"A","ậ":"a","Ậ":"A","ẫ":"a","Ẫ":"A","ắ":"a","Ắ":"A","ằ":"a","Ằ":"A","ặ":"a","Ặ":"A","ẵ":"a","Ẵ":"A","⓪":"0","①":"1","②":"2","③":"3","④":"4","⑤":"5","⑥":"6","⑦":"7","⑧":"8","⑨":"9","⑩":"10","⑪":"11","⑫":"12","⑬":"13","⑭":"14","⑮":"15","⑯":"16","⑰":"17","⑱":"18","⑲":"18","⑳":"18","⓵":"1","⓶":"2","⓷":"3","⓸":"4","⓹":"5","⓺":"6","⓻":"7","⓼":"8","⓽":"9","⓾":"10","⓿":"0","⓫":"11","⓬":"12","⓭":"13","⓮":"14","⓯":"15","⓰":"16","⓱":"17","⓲":"18","⓳":"19","⓴":"20","Ⓐ":"A","Ⓑ":"B","Ⓒ":"C","Ⓓ":"D","Ⓔ":"E","Ⓕ":"F","Ⓖ":"G","Ⓗ":"H","Ⓘ":"I","Ⓙ":"J","Ⓚ":"K","Ⓛ":"L","Ⓜ":"M","Ⓝ":"N","Ⓞ":"O","Ⓟ":"P","Ⓠ":"Q","Ⓡ":"R","Ⓢ":"S","Ⓣ":"T","Ⓤ":"U","Ⓥ":"V","Ⓦ":"W","Ⓧ":"X","Ⓨ":"Y","Ⓩ":"Z","ⓐ":"a","ⓑ":"b","ⓒ":"c","ⓓ":"d","ⓔ":"e","ⓕ":"f","ⓖ":"g","ⓗ":"h","ⓘ":"i","ⓙ":"j","ⓚ":"k","ⓛ":"l","ⓜ":"m","ⓝ":"n","ⓞ":"o","ⓟ":"p","ⓠ":"q","ⓡ":"r","ⓢ":"s","ⓣ":"t","ⓤ":"u","ⓦ":"v","ⓥ":"w","ⓧ":"x","ⓨ":"y","ⓩ":"z","“":'"',"”":'"',"‘":"'","’":"'","∂":"d","ƒ":"f","™":"(TM)","©":"(C)","œ":"oe","Œ":"OE","®":"(R)","†":"+","℠":"(SM)","…":"...","˚":"o","º":"o","ª":"a","•":"*","၊":",","။":".",$:"USD","€":"EUR","₢":"BRN","₣":"FRF","£":"GBP","₤":"ITL","₦":"NGN","₧":"ESP","₩":"KRW","₪":"ILS","₫":"VND","₭":"LAK","₮":"MNT","₯":"GRD","₱":"ARS","₲":"PYG","₳":"ARA","₴":"UAH","₵":"GHS","¢":"cent","¥":"CNY","元":"CNY","円":"YEN","﷼":"IRR","₠":"EWE","฿":"THB","₨":"INR","₹":"INR","₰":"PF","₺":"TRY","؋":"AFN","₼":"AZN","лв":"BGN","៛":"KHR","₡":"CRC","₸":"KZT","ден":"MKD","zł":"PLN","₽":"RUB","₾":"GEL"},n=["်","ް"],t={"ာ":"a","ါ":"a","ေ":"e","ဲ":"e","ိ":"i","ီ":"i","ို":"o","ု":"u","ူ":"u","ေါင်":"aung","ော":"aw","ော်":"aw","ေါ":"aw","ေါ်":"aw","်":"်","က်":"et","ိုက်":"aik","ောက်":"auk","င်":"in","ိုင်":"aing","ောင်":"aung","စ်":"it","ည်":"i","တ်":"at","ိတ်":"eik","ုတ်":"ok","ွတ်":"ut","ေတ်":"it","ဒ်":"d","ိုဒ်":"ok","ုဒ်":"ait","န်":"an","ာန်":"an","ိန်":"ein","ုန်":"on","ွန်":"un","ပ်":"at","ိပ်":"eik","ုပ်":"ok","ွပ်":"ut","န်ုပ်":"nub","မ်":"an","ိမ်":"ein","ုမ်":"on","ွမ်":"un","ယ်":"e","ိုလ်":"ol","ဉ်":"in","ံ":"an","ိံ":"ein","ုံ":"on","ައް":"ah","ަށް":"ah"},i={en:{},az:{"ç":"c","ə":"e","ğ":"g","ı":"i","ö":"o","ş":"s","ü":"u","Ç":"C","Ə":"E","Ğ":"G","İ":"I","Ö":"O","Ş":"S","Ü":"U"},cs:{"č":"c","ď":"d","ě":"e","ň":"n","ř":"r","š":"s","ť":"t","ů":"u","ž":"z","Č":"C","Ď":"D","Ě":"E","Ň":"N","Ř":"R","Š":"S","Ť":"T","Ů":"U","Ž":"Z"},fi:{"ä":"a","Ä":"A","ö":"o","Ö":"O"},hu:{"ä":"a","Ä":"A","ö":"o","Ö":"O","ü":"u","Ü":"U","ű":"u","Ű":"U"},lt:{"ą":"a","č":"c","ę":"e","ė":"e","į":"i","š":"s","ų":"u","ū":"u","ž":"z","Ą":"A","Č":"C","Ę":"E","Ė":"E","Į":"I","Š":"S","Ų":"U","Ū":"U"},lv:{"ā":"a","č":"c","ē":"e","ģ":"g","ī":"i","ķ":"k","ļ":"l","ņ":"n","š":"s","ū":"u","ž":"z","Ā":"A","Č":"C","Ē":"E","Ģ":"G","Ī":"i","Ķ":"k","Ļ":"L","Ņ":"N","Š":"S","Ū":"u","Ž":"Z"},pl:{"ą":"a","ć":"c","ę":"e","ł":"l","ń":"n","ó":"o","ś":"s","ź":"z","ż":"z","Ą":"A","Ć":"C","Ę":"e","Ł":"L","Ń":"N","Ó":"O","Ś":"S","Ź":"Z","Ż":"Z"},sv:{"ä":"a","Ä":"A","ö":"o","Ö":"O"},sk:{"ä":"a","Ä":"A"},sr:{"љ":"lj","њ":"nj","Љ":"Lj","Њ":"Nj","đ":"dj","Đ":"Dj"},tr:{"Ü":"U","Ö":"O","ü":"u","ö":"o"}},o={ar:{"∆":"delta","∞":"la-nihaya","♥":"hob","&":"wa","|":"aw","<":"aqal-men",">":"akbar-men","∑":"majmou","¤":"omla"},az:{},ca:{"∆":"delta","∞":"infinit","♥":"amor","&":"i","|":"o","<":"menys que",">":"mes que","∑":"suma dels","¤":"moneda"},cs:{"∆":"delta","∞":"nekonecno","♥":"laska","&":"a","|":"nebo","<":"mensi nez",">":"vetsi nez","∑":"soucet","¤":"mena"},de:{"∆":"delta","∞":"unendlich","♥":"Liebe","&":"und","|":"oder","<":"kleiner als",">":"groesser als","∑":"Summe von","¤":"Waehrung"},dv:{"∆":"delta","∞":"kolunulaa","♥":"loabi","&":"aai","|":"noonee","<":"ah vure kuda",">":"ah vure bodu","∑":"jumula","¤":"faisaa"},en:{"∆":"delta","∞":"infinity","♥":"love","&":"and","|":"or","<":"less than",">":"greater than","∑":"sum","¤":"currency"},es:{"∆":"delta","∞":"infinito","♥":"amor","&":"y","|":"u","<":"menos que",">":"mas que","∑":"suma de los","¤":"moneda"},fa:{"∆":"delta","∞":"bi-nahayat","♥":"eshgh","&":"va","|":"ya","<":"kamtar-az",">":"bishtar-az","∑":"majmooe","¤":"vahed"},fi:{"∆":"delta","∞":"aarettomyys","♥":"rakkaus","&":"ja","|":"tai","<":"pienempi kuin",">":"suurempi kuin","∑":"summa","¤":"valuutta"},fr:{"∆":"delta","∞":"infiniment","♥":"Amour","&":"et","|":"ou","<":"moins que",">":"superieure a","∑":"somme des","¤":"monnaie"},ge:{"∆":"delta","∞":"usasruloba","♥":"siqvaruli","&":"da","|":"an","<":"naklebi",">":"meti","∑":"jami","¤":"valuta"},gr:{},hu:{"∆":"delta","∞":"vegtelen","♥":"szerelem","&":"es","|":"vagy","<":"kisebb mint",">":"nagyobb mint","∑":"szumma","¤":"penznem"},it:{"∆":"delta","∞":"infinito","♥":"amore","&":"e","|":"o","<":"minore di",">":"maggiore di","∑":"somma","¤":"moneta"},lt:{"∆":"delta","∞":"begalybe","♥":"meile","&":"ir","|":"ar","<":"maziau nei",">":"daugiau nei","∑":"suma","¤":"valiuta"},lv:{"∆":"delta","∞":"bezgaliba","♥":"milestiba","&":"un","|":"vai","<":"mazak neka",">":"lielaks neka","∑":"summa","¤":"valuta"},my:{"∆":"kwahkhyaet","∞":"asaonasme","♥":"akhyait","&":"nhin","|":"tho","<":"ngethaw",">":"kyithaw","∑":"paungld","¤":"ngwekye"},mk:{},nl:{"∆":"delta","∞":"oneindig","♥":"liefde","&":"en","|":"of","<":"kleiner dan",">":"groter dan","∑":"som","¤":"valuta"},pl:{"∆":"delta","∞":"nieskonczonosc","♥":"milosc","&":"i","|":"lub","<":"mniejsze niz",">":"wieksze niz","∑":"suma","¤":"waluta"},pt:{"∆":"delta","∞":"infinito","♥":"amor","&":"e","|":"ou","<":"menor que",">":"maior que","∑":"soma","¤":"moeda"},ro:{"∆":"delta","∞":"infinit","♥":"dragoste","&":"si","|":"sau","<":"mai mic ca",">":"mai mare ca","∑":"suma","¤":"valuta"},ru:{"∆":"delta","∞":"beskonechno","♥":"lubov","&":"i","|":"ili","<":"menshe",">":"bolshe","∑":"summa","¤":"valjuta"},sk:{"∆":"delta","∞":"nekonecno","♥":"laska","&":"a","|":"alebo","<":"menej ako",">":"viac ako","∑":"sucet","¤":"mena"},sr:{},tr:{"∆":"delta","∞":"sonsuzluk","♥":"ask","&":"ve","|":"veya","<":"kucuktur",">":"buyuktur","∑":"toplam","¤":"para birimi"},uk:{"∆":"delta","∞":"bezkinechnist","♥":"lubov","&":"i","|":"abo","<":"menshe",">":"bilshe","∑":"suma","¤":"valjuta"},vn:{"∆":"delta","∞":"vo cuc","♥":"yeu","&":"va","|":"hoac","<":"nho hon",">":"lon hon","∑":"tong","¤":"tien te"}},u=[";","?",":","@","&","=","+","$",",","/"].join(""),s=[";","?",":","@","&","=","+","$",","].join(""),l=[".","!","~","*","'","(",")"].join(""),r=function(a,r){var m,d,g,k,y,f,p,z,b,A,v,E,O,j,S="-",w="",U="",C=!0,N={},R="";if("string"!=typeof a)return"";if("string"==typeof r&&(S=r),p=o.en,z=i.en,"object"==typeof r){m=r.maintainCase||!1,N=r.custom&&"object"==typeof r.custom?r.custom:N,g=+r.truncate>1&&r.truncate||!1,k=r.uric||!1,y=r.uricNoSlash||!1,f=r.mark||!1,C=!1!==r.symbols&&!1!==r.lang,S=r.separator||S,k&&(R+=u),y&&(R+=s),f&&(R+=l),p=r.lang&&o[r.lang]&&C?o[r.lang]:C?o.en:{},z=r.lang&&i[r.lang]?i[r.lang]:!1===r.lang||!0===r.lang?{}:i.en,r.titleCase&&"number"==typeof r.titleCase.length&&Array.prototype.toString.call(r.titleCase)?(r.titleCase.forEach(function(a){N[a+""]=a+""}),d=!0):d=!!r.titleCase,r.custom&&"number"==typeof r.custom.length&&Array.prototype.toString.call(r.custom)&&r.custom.forEach(function(a){N[a+""]=a+""}),Object.keys(N).forEach(function(e){var n;n=e.length>1?new RegExp("\\b"+h(e)+"\\b","gi"):new RegExp(h(e),"gi"),a=a.replace(n,N[e])});for(v in N)R+=v}for(R=h(R+=S),O=!1,j=!1,A=0,E=(a=a.replace(/(^\s+|\s+$)/g,"")).length;A<E;A++)v=a[A],c(v,N)?O=!1:z[v]?(v=O&&z[v].match(/[A-Za-z0-9]/)?" "+z[v]:z[v],O=!1):v in e?(A+1<E&&n.indexOf(a[A+1])>=0?(U+=v,v=""):!0===j?(v=t[U]+e[v],U=""):v=O&&e[v].match(/[A-Za-z0-9]/)?" "+e[v]:e[v],O=!1,j=!1):v in t?(U+=v,v="",A===E-1&&(v=t[U]),j=!0):!p[v]||k&&-1!==u.indexOf(v)||y&&-1!==s.indexOf(v)?(!0===j?(v=t[U]+v,U="",j=!1):O&&(/[A-Za-z0-9]/.test(v)||w.substr(-1).match(/A-Za-z0-9]/))&&(v=" "+v),O=!1):(v=O||w.substr(-1).match(/[A-Za-z0-9]/)?S+p[v]:p[v],v+=void 0!==a[A+1]&&a[A+1].match(/[A-Za-z0-9]/)?S:"",O=!0),w+=v.replace(new RegExp("[^\\w\\s"+R+"_-]","g"),S);return d&&(w=w.replace(/(\w)(\S*)/g,function(a,e,n){var t=e.toUpperCase()+(null!==n?n:"");return Object.keys(N).indexOf(t.toLowerCase())<0?t:t.toLowerCase()})),w=w.replace(/\s+/g,S).replace(new RegExp("\\"+S+"+","g"),S).replace(new RegExp("(^\\"+S+"+|\\"+S+"+$)","g"),""),g&&w.length>g&&(b=w.charAt(g)===S,w=w.slice(0,g),b||(w=w.slice(0,w.lastIndexOf(S)))),m||d||(w=w.toLowerCase()),w},m=function(a){return function(e){return r(e,a)}},h=function(a){return a.replace(/[-\\^$*+?.()|[\]{}\/]/g,"\\$&")},c=function(a,e){for(var n in e)if(e[n]===a)return!0};if("undefined"!=typeof module&&module.exports)module.exports=r,module.exports.createSlug=m;else if("undefined"!=typeof define&&define.amd)define([],function(){return r});else try{if(a.getSlug||a.createSlug)throw"speakingurl: globals exists /(getSlug|createSlug)/";a.getSlug=r,a.createSlug=m}catch(a){}}(this);
classes/admin-user-profile.php CHANGED
@@ -26,7 +26,21 @@ class Dokan_Admin_User_Profile {
26
  function enqueue_scripts( $page ) {
27
  if ( in_array( $page, array( 'profile.php', 'user-edit.php' )) ) {
28
  wp_enqueue_media();
 
 
 
 
 
 
 
 
 
 
 
 
 
29
  }
 
30
  }
31
 
32
  /**
@@ -79,60 +93,68 @@ class Dokan_Admin_User_Profile {
79
  ),
80
  );
81
  ?>
82
- <h3><?php _e( 'Dokan Options', 'dokan-lite' ); ?></h3>
83
 
84
  <table class="form-table">
85
  <tbody>
86
  <tr>
87
- <th><?php _e( 'Banner', 'dokan-lite' ); ?></th>
88
  <td>
89
  <div class="dokan-banner">
90
  <div class="image-wrap<?php echo $banner ? '' : ' dokan-hide'; ?>">
91
  <?php $banner_url = $banner ? wp_get_attachment_url( $banner ) : ''; ?>
92
- <input type="hidden" class="dokan-file-field" value="<?php echo $banner; ?>" name="dokan_banner">
93
  <img class="dokan-banner-img" src="<?php echo esc_url( $banner_url ); ?>">
94
 
95
  <a class="close dokan-remove-banner-image">&times;</a>
96
  </div>
97
 
98
- <div class="button-area<?php echo $banner ? ' dokan-hide' : ''; ?>">
99
- <a href="#" class="dokan-banner-drag button button-primary"><?php _e( 'Upload banner', 'dokan-lite' ); ?></a>
100
- <p class="description"><?php _e( '(Upload a banner for your store. Banner size is (825x300) pixels. )', 'dokan-lite' ); ?></p>
101
  </div>
102
  </div> <!-- .dokan-banner -->
103
  </td>
104
  </tr>
105
 
106
  <tr>
107
- <th><?php _e( 'Store name', 'dokan-lite' ); ?></th>
108
  <td>
109
  <input type="text" name="dokan_store_name" class="regular-text" value="<?php echo esc_attr( $store_settings['store_name'] ); ?>">
110
  </td>
111
  </tr>
112
 
113
  <tr>
114
- <th><?php _e( 'Address 1', 'dokan-lite' ); ?></th>
 
 
 
 
 
 
 
 
115
  <td>
116
  <input type="text" name="dokan_store_address[street_1]" class="regular-text" value="<?php echo esc_attr( $address_street1 ) ?>">
117
  </td>
118
  </tr>
119
 
120
  <tr>
121
- <th><?php _e( 'Address 2', 'dokan-lite' ); ?></th>
122
  <td>
123
  <input type="text" name="dokan_store_address[street_2]" class="regular-text" value="<?php echo esc_attr( $address_street2 ) ?>">
124
  </td>
125
  </tr>
126
 
127
  <tr>
128
- <th><?php _e( 'Town/City', 'dokan-lite' ); ?></th>
129
  <td>
130
  <input type="text" name="dokan_store_address[city]" class="regular-text" value="<?php echo esc_attr( $address_city ) ?>">
131
  </td>
132
  </tr>
133
 
134
  <tr>
135
- <th><?php _e( 'Zip Code', 'dokan-lite' ); ?></th>
136
  <td>
137
  <input type="text" name="dokan_store_address[zip]" class="regular-text" value="<?php echo esc_attr( $address_zip ) ?>">
138
  </td>
@@ -143,7 +165,7 @@ class Dokan_Admin_User_Profile {
143
  <th><label for="<?php echo esc_attr( $key ); ?>"><?php echo esc_html( $field['label'] ); ?></label></th>
144
  <td>
145
  <?php if ( ! empty( $field['type'] ) && 'select' == $field['type'] ) : ?>
146
- <select name="dokan_store_address[<?php echo esc_attr( $key ); ?>]" id="<?php echo esc_attr( $key ); ?>" class="<?php echo ( ! empty( $field['class'] ) ? $field['class'] : '' ); ?>" style="width: 25em;">
147
  <?php
148
  if ( $key == 'country') {
149
  $selected = esc_attr( $address_country );
@@ -162,7 +184,7 @@ class Dokan_Admin_User_Profile {
162
  $value = esc_attr( $address_state );
163
  }
164
  ?>
165
- <input type="text" name="dokan_store_address[<?php echo esc_attr( $key ); ?>]" id="<?php echo esc_attr( $key ); ?>" value="<?php echo $value; ?>" class="<?php echo ( ! empty( $field['class'] ) ? $field['class'] : 'regular-text' ); ?>" />
166
  <?php endif; ?>
167
 
168
  <span class="description"><?php echo wp_kses_post( $field['description'] ); ?></span>
@@ -172,7 +194,7 @@ class Dokan_Admin_User_Profile {
172
 
173
 
174
  <tr>
175
- <th><?php _e( 'Phone Number', 'dokan-lite' ); ?></th>
176
  <td>
177
  <input type="text" name="dokan_store_phone" class="regular-text" value="<?php echo esc_attr( $store_settings['phone'] ); ?>">
178
  </td>
@@ -181,21 +203,21 @@ class Dokan_Admin_User_Profile {
181
  <?php foreach ($social_fields as $key => $value) { ?>
182
 
183
  <tr>
184
- <th><?php echo $value['title']; ?></th>
185
  <td>
186
- <input type="text" name="dokan_social[<?php echo $key; ?>]" class="regular-text" value="<?php echo isset( $store_settings['social'][$key] ) ? esc_url( $store_settings['social'][$key] ) : ''; ?>">
187
  </td>
188
  </tr>
189
 
190
  <?php } ?>
191
 
192
  <tr>
193
- <th><?php _e( 'Payment Options : ', 'dokan-lite' ); ?></th>
194
  </tr>
195
 
196
  <?php if( isset( $store_settings['payment']['paypal']['email'] ) ) { ?>
197
  <tr>
198
- <th><?php _e( 'Paypal Email ', 'dokan-lite' ); ?></th>
199
  <td>
200
  <input type="text" disabled class="regular-text" value="<?php echo esc_attr( $store_settings['payment']['paypal']['email'] ); ?>">
201
  </td>
@@ -203,7 +225,7 @@ class Dokan_Admin_User_Profile {
203
  <?php } ?>
204
  <?php if( isset( $store_settings['payment']['skrill']['email'] ) ) { ?>
205
  <tr>
206
- <th><?php _e( 'Skrill Email ', 'dokan-lite' ); ?></th>
207
  <td>
208
  <input type="text" disabled class="regular-text" value="<?php echo esc_attr( $store_settings['payment']['skrill']['email'] ); ?>">
209
  </td>
@@ -212,96 +234,99 @@ class Dokan_Admin_User_Profile {
212
 
213
  <?php if( isset( $store_settings['payment']['bank'] ) ) { ?>
214
  <tr>
215
- <th><?php _e( 'Bank name ', 'dokan-lite' ); ?></th>
216
  <td>
217
  <input type="text" disabled class="regular-text" value="<?php echo isset( $store_settings['payment']['bank']['bank_name'] ) ? esc_attr( $store_settings['payment']['bank']['bank_name'] ) : ''; ?>">
218
  </td>
219
  </tr>
220
  <tr>
221
- <th><?php _e( 'Account Name ', 'dokan-lite' ); ?></th>
222
  <td>
223
  <input type="text" disabled class="regular-text" value="<?php echo isset( $store_settings['payment']['bank']['ac_name'] ) ? esc_attr( $store_settings['payment']['bank']['ac_name'] ) : ''; ?>">
224
  </td>
225
  </tr>
226
  <tr>
227
- <th><?php _e( 'Account Number ', 'dokan-lite' ); ?></th>
228
  <td>
229
  <input type="text" disabled class="regular-text" value="<?php echo isset( $store_settings['payment']['bank']['ac_number'] ) ? esc_attr( $store_settings['payment']['bank']['ac_number'] ) : ''; ?>">
230
  </td>
231
  </tr>
232
  <tr>
233
- <th><?php _e( 'Bank Address ', 'dokan-lite' ); ?></th>
234
  <td>
235
  <input type="text" disabled class="regular-text" value="<?php echo isset( $store_settings['payment']['bank']['bank_addr'] ) ? esc_attr( $store_settings['payment']['bank']['bank_addr'] ) : ''; ?>">
236
  </td>
237
  </tr>
238
  <tr>
239
- <th><?php _e( 'Bank Swift ', 'dokan-lite' ); ?></th>
240
  <td>
241
  <input type="text" disabled class="regular-text" value="<?php echo isset( $store_settings['payment']['bank']['swift'] ) ? esc_attr( $store_settings['payment']['bank']['swift'] ) : ''; ?>">
242
  </td>
243
  </tr>
244
  <?php } ?>
245
  <tr>
246
- <th><?php _e( 'Selling', 'dokan-lite' ); ?></th>
247
  <td>
248
  <label for="dokan_enable_selling">
249
  <input type="hidden" name="dokan_enable_selling" value="no">
250
  <input name="dokan_enable_selling" type="checkbox" id="dokan_enable_selling" value="yes" <?php checked( $selling, 'yes' ); ?> />
251
- <?php _e( 'Enable Adding Products', 'dokan-lite' ); ?>
252
  </label>
253
 
254
- <p class="description"><?php _e( 'Enable or disable product adding capability', 'dokan-lite' ) ?></p>
255
  </td>
256
  </tr>
257
 
258
  <tr>
259
- <th><?php _e( 'Publishing', 'dokan-lite' ); ?></th>
260
  <td>
261
  <label for="dokan_publish">
262
  <input type="hidden" name="dokan_publish" value="no">
263
  <input name="dokan_publish" type="checkbox" id="dokan_publish" value="yes" <?php checked( $publishing, 'yes' ); ?> />
264
- <?php _e( 'Publish product directly', 'dokan-lite' ); ?>
265
  </label>
266
 
267
- <p class="description"><?php _e( 'Bypass pending, publish products directly', 'dokan-lite' ) ?></p>
268
  </td>
269
  </tr>
270
 
271
  <tr>
272
- <th><?php _e( 'Admin Commission Type ', 'dokan-lite' ); ?></th>
273
  <td>
274
  <select id="dokan_admin_percentage_type" name="dokan_admin_percentage_type">
275
- <option value="percentage" <?php selected( $admin_commission_type, 'percentage' ) ?> ><?php _e( 'Percentage', 'dokan-lite' ) ?></option>
276
- <option value="flat" <?php selected( $admin_commission_type, 'flat' ) ?>><?php _e( 'Flat', 'dokan-lite' ) ?></option>
277
  </select>
278
- <p class="description"><?php _e( 'Set the commmission type admin gets from this seller', 'dokan-lite' ) ?></p>
279
  </td>
280
  </tr>
281
  <tr>
282
- <th><?php _e( 'Admin Commission ', 'dokan-lite' ); ?></th>
283
  <td>
284
  <input type="text" class="small-text" name="dokan_admin_percentage" value="<?php echo esc_attr( $admin_commission ); ?>">
285
 
286
- <p class="description"><?php _e( 'It will override the default commission admin gets from each sales', 'dokan-lite' ) ?></p>
287
  </td>
288
  </tr>
289
 
290
  <tr>
291
- <th><?php _e( 'Featured vendor', 'dokan-lite' ); ?></th>
292
  <td>
293
  <label for="dokan_feature">
294
  <input type="hidden" name="dokan_feature" value="no">
295
  <input name="dokan_feature" type="checkbox" id="dokan_feature" value="yes" <?php checked( $feature_seller, 'yes' ); ?> />
296
- <?php _e( 'Mark as featured vendor', 'dokan-lite' ); ?>
297
  </label>
298
 
299
- <p class="description"><?php _e( 'This vendor will be marked as a featured vendor.', 'dokan-lite' ) ?></p>
300
  </td>
301
  </tr>
302
 
303
  <?php do_action( 'dokan_seller_meta_fields', $user ); ?>
304
 
 
 
 
305
  </tbody>
306
  </table>
307
 
@@ -335,6 +360,12 @@ class Dokan_Admin_User_Profile {
335
  display:block;
336
  cursor: pointer;
337
  }
 
 
 
 
 
 
338
  </style>
339
 
340
  <script type="text/javascript">
@@ -395,6 +426,58 @@ class Dokan_Admin_User_Profile {
395
  };
396
 
397
  Dokan_Settings.init();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
398
  });
399
  </script>
400
  <?php
@@ -412,13 +495,17 @@ class Dokan_Admin_User_Profile {
412
  return;
413
  }
414
 
 
 
 
 
415
  if ( ! isset( $_POST['dokan_enable_selling'] ) ) {
416
  return;
417
  }
418
 
419
  $selling = sanitize_text_field( $_POST['dokan_enable_selling'] );
420
  $publishing = sanitize_text_field( $_POST['dokan_publish'] );
421
- $percentage = empty( $_POST['dokan_admin_percentage'] ) ? '' : floatval( $_POST['dokan_admin_percentage'] );
422
  $percentage_type = empty( $_POST['dokan_admin_percentage_type'] ) ? 'percentage' : $_POST['dokan_admin_percentage_type'];
423
  $feature_seller = sanitize_text_field( $_POST['dokan_feature'] );
424
  $store_settings = dokan_get_store_info( $user_id );
@@ -440,6 +527,7 @@ class Dokan_Admin_User_Profile {
440
  }
441
  }
442
 
 
443
  update_user_meta( $user_id, 'dokan_profile_settings', $store_settings );
444
  update_user_meta( $user_id, 'dokan_enable_selling', $selling );
445
  update_user_meta( $user_id, 'dokan_publishing', $publishing );
@@ -450,4 +538,4 @@ class Dokan_Admin_User_Profile {
450
 
451
  do_action( 'dokan_process_seller_meta_fields', $user_id );
452
  }
453
- }
26
  function enqueue_scripts( $page ) {
27
  if ( in_array( $page, array( 'profile.php', 'user-edit.php' )) ) {
28
  wp_enqueue_media();
29
+
30
+ $admin_admin_script = array(
31
+ 'ajaxurl' => admin_url( 'admin-ajax.php' ),
32
+ 'nonce' => wp_create_nonce( 'dokan_reviews' ),
33
+ 'ajax_loader' => DOKAN_PLUGIN_ASSEST.'/images/ajax-loader.gif',
34
+ 'seller' => array(
35
+ 'available' => __( 'Available', 'dokan-lite' ),
36
+ 'notAvailable' => __( 'Not Available', 'dokan-lite' )
37
+ ),
38
+ );
39
+
40
+ wp_enqueue_script( 'speaking-url' );
41
+ wp_localize_script( 'jquery', 'dokan_user_profile', $admin_admin_script );
42
  }
43
+
44
  }
45
 
46
  /**
93
  ),
94
  );
95
  ?>
96
+ <h3><?php esc_html_e( 'Dokan Options', 'dokan-lite' ); ?></h3>
97
 
98
  <table class="form-table">
99
  <tbody>
100
  <tr>
101
+ <th><?php esc_html_e( 'Banner', 'dokan-lite' ); ?></th>
102
  <td>
103
  <div class="dokan-banner">
104
  <div class="image-wrap<?php echo $banner ? '' : ' dokan-hide'; ?>">
105
  <?php $banner_url = $banner ? wp_get_attachment_url( $banner ) : ''; ?>
106
+ <input type="hidden" class="dokan-file-field" value="<?php echo esc_attr( $banner ); ?>" name="dokan_banner">
107
  <img class="dokan-banner-img" src="<?php echo esc_url( $banner_url ); ?>">
108
 
109
  <a class="close dokan-remove-banner-image">&times;</a>
110
  </div>
111
 
112
+ <div class="button-area<?php echo esc_attr( $banner ) ? ' dokan-hide' : ''; ?>">
113
+ <a href="#" class="dokan-banner-drag button button-primary"><?php esc_html_e( 'Upload banner', 'dokan-lite' ); ?></a>
114
+ <p class="description"><?php esc_html_e( '(Upload a banner for your store. Banner size is (825x300) pixels. )', 'dokan-lite' ); ?></p>
115
  </div>
116
  </div> <!-- .dokan-banner -->
117
  </td>
118
  </tr>
119
 
120
  <tr>
121
+ <th><?php esc_html_e( 'Store name', 'dokan-lite' ); ?></th>
122
  <td>
123
  <input type="text" name="dokan_store_name" class="regular-text" value="<?php echo esc_attr( $store_settings['store_name'] ); ?>">
124
  </td>
125
  </tr>
126
 
127
  <tr>
128
+ <th><?php esc_html_e( 'Store URL', 'dokan-lite' ); ?></th>
129
+ <td>
130
+ <input type="text" name="dokan_store_url" class="regular-text" id="seller-url" value="<?php echo esc_attr( $user->data->user_nicename ); ?>"><strong id="url-alart-mgs"></strong>
131
+ <p><small><?php echo home_url() . '/' . dokan_get_option( 'custom_store_url', 'dokan_general', 'store' ); ?>/<strong id="url-alart"><?php echo esc_attr( $user->data->user_nicename ); ?></strong></small></p>
132
+ </td>
133
+ </tr>
134
+
135
+ <tr>
136
+ <th><?php esc_html_e( 'Address 1', 'dokan-lite' ); ?></th>
137
  <td>
138
  <input type="text" name="dokan_store_address[street_1]" class="regular-text" value="<?php echo esc_attr( $address_street1 ) ?>">
139
  </td>
140
  </tr>
141
 
142
  <tr>
143
+ <th><?php esc_html_e( 'Address 2', 'dokan-lite' ); ?></th>
144
  <td>
145
  <input type="text" name="dokan_store_address[street_2]" class="regular-text" value="<?php echo esc_attr( $address_street2 ) ?>">
146
  </td>
147
  </tr>
148
 
149
  <tr>
150
+ <th><?php esc_html_e( 'Town/City', 'dokan-lite' ); ?></th>
151
  <td>
152
  <input type="text" name="dokan_store_address[city]" class="regular-text" value="<?php echo esc_attr( $address_city ) ?>">
153
  </td>
154
  </tr>
155
 
156
  <tr>
157
+ <th><?php esc_html_e( 'Zip Code', 'dokan-lite' ); ?></th>
158
  <td>
159
  <input type="text" name="dokan_store_address[zip]" class="regular-text" value="<?php echo esc_attr( $address_zip ) ?>">
160
  </td>
165
  <th><label for="<?php echo esc_attr( $key ); ?>"><?php echo esc_html( $field['label'] ); ?></label></th>
166
  <td>
167
  <?php if ( ! empty( $field['type'] ) && 'select' == $field['type'] ) : ?>
168
+ <select name="dokan_store_address[<?php echo esc_attr( $key ); ?>]" id="<?php echo esc_attr( $key ); ?>" class="<?php echo ( ! empty( $field['class'] ) ? esc_attr( $field['class'] ) : '' ); ?>" style="width: 25em;">
169
  <?php
170
  if ( $key == 'country') {
171
  $selected = esc_attr( $address_country );
184
  $value = esc_attr( $address_state );
185
  }
186
  ?>
187
+ <input type="text" name="dokan_store_address[<?php echo esc_attr( $key ); ?>]" id="<?php echo esc_attr( $key ); ?>" value="<?php echo esc_attr( $value ); ?>" class="<?php echo ( ! empty( $field['class'] ) ? esc_attr( $field['class'] ) : 'regular-text' ); ?>" />
188
  <?php endif; ?>
189
 
190
  <span class="description"><?php echo wp_kses_post( $field['description'] ); ?></span>
194
 
195
 
196
  <tr>
197
+ <th><?php esc_html_e( 'Phone Number', 'dokan-lite' ); ?></th>
198
  <td>
199
  <input type="text" name="dokan_store_phone" class="regular-text" value="<?php echo esc_attr( $store_settings['phone'] ); ?>">
200
  </td>
203
  <?php foreach ($social_fields as $key => $value) { ?>
204
 
205
  <tr>
206
+ <th><?php echo esc_attr( $value['title'] ); ?></th>
207
  <td>
208
+ <input type="text" name="dokan_social[<?php echo esc_attr( $key ); ?>]" class="regular-text" value="<?php echo isset( $store_settings['social'][$key] ) ? esc_url( $store_settings['social'][$key] ) : ''; ?>">
209
  </td>
210
  </tr>
211
 
212
  <?php } ?>
213
 
214
  <tr>
215
+ <th><?php esc_html_e( 'Payment Options : ', 'dokan-lite' ); ?></th>
216
  </tr>
217
 
218
  <?php if( isset( $store_settings['payment']['paypal']['email'] ) ) { ?>
219
  <tr>
220
+ <th><?php esc_html_e( 'Paypal Email ', 'dokan-lite' ); ?></th>
221
  <td>
222
  <input type="text" disabled class="regular-text" value="<?php echo esc_attr( $store_settings['payment']['paypal']['email'] ); ?>">
223
  </td>
225
  <?php } ?>
226
  <?php if( isset( $store_settings['payment']['skrill']['email'] ) ) { ?>
227
  <tr>
228
+ <th><?php esc_html_e( 'Skrill Email ', 'dokan-lite' ); ?></th>
229
  <td>
230
  <input type="text" disabled class="regular-text" value="<?php echo esc_attr( $store_settings['payment']['skrill']['email'] ); ?>">
231
  </td>
234
 
235
  <?php if( isset( $store_settings['payment']['bank'] ) ) { ?>
236
  <tr>
237
+ <th><?php esc_html_e( 'Bank name ', 'dokan-lite' ); ?></th>
238
  <td>
239
  <input type="text" disabled class="regular-text" value="<?php echo isset( $store_settings['payment']['bank']['bank_name'] ) ? esc_attr( $store_settings['payment']['bank']['bank_name'] ) : ''; ?>">
240
  </td>
241
  </tr>
242
  <tr>
243
+ <th><?php esc_html_e( 'Account Name ', 'dokan-lite' ); ?></th>
244
  <td>
245
  <input type="text" disabled class="regular-text" value="<?php echo isset( $store_settings['payment']['bank']['ac_name'] ) ? esc_attr( $store_settings['payment']['bank']['ac_name'] ) : ''; ?>">
246
  </td>
247
  </tr>
248
  <tr>
249
+ <th><?php esc_html_e( 'Account Number ', 'dokan-lite' ); ?></th>
250
  <td>
251
  <input type="text" disabled class="regular-text" value="<?php echo isset( $store_settings['payment']['bank']['ac_number'] ) ? esc_attr( $store_settings['payment']['bank']['ac_number'] ) : ''; ?>">
252
  </td>
253
  </tr>
254
  <tr>
255
+ <th><?php esc_html_e( 'Bank Address ', 'dokan-lite' ); ?></th>
256
  <td>
257
  <input type="text" disabled class="regular-text" value="<?php echo isset( $store_settings['payment']['bank']['bank_addr'] ) ? esc_attr( $store_settings['payment']['bank']['bank_addr'] ) : ''; ?>">
258
  </td>
259
  </tr>
260
  <tr>
261
+ <th><?php esc_html_e( 'Bank Swift ', 'dokan-lite' ); ?></th>
262
  <td>
263
  <input type="text" disabled class="regular-text" value="<?php echo isset( $store_settings['payment']['bank']['swift'] ) ? esc_attr( $store_settings['payment']['bank']['swift'] ) : ''; ?>">
264
  </td>
265
  </tr>
266
  <?php } ?>
267
  <tr>
268
+ <th><?php esc_html_e( 'Selling', 'dokan-lite' ); ?></th>
269
  <td>
270
  <label for="dokan_enable_selling">
271
  <input type="hidden" name="dokan_enable_selling" value="no">
272
  <input name="dokan_enable_selling" type="checkbox" id="dokan_enable_selling" value="yes" <?php checked( $selling, 'yes' ); ?> />
273
+ <?php esc_html_e( 'Enable Adding Products', 'dokan-lite' ); ?>
274
  </label>
275
 
276
+ <p class="description"><?php esc_html_e( 'Enable or disable product adding capability', 'dokan-lite' ) ?></p>
277
  </td>
278
  </tr>
279
 
280
  <tr>
281
+ <th><?php esc_html_e( 'Publishing', 'dokan-lite' ); ?></th>
282
  <td>
283
  <label for="dokan_publish">
284
  <input type="hidden" name="dokan_publish" value="no">
285
  <input name="dokan_publish" type="checkbox" id="dokan_publish" value="yes" <?php checked( $publishing, 'yes' ); ?> />
286
+ <?php esc_html_e( 'Publish product directly', 'dokan-lite' ); ?>
287
  </label>
288
 
289
+ <p class="description"><?php esc_html_e( 'Bypass pending, publish products directly', 'dokan-lite' ) ?></p>
290
  </td>
291
  </tr>
292
 
293
  <tr>
294
+ <th><?php esc_html_e( 'Admin Commission Type ', 'dokan-lite' ); ?></th>
295
  <td>
296
  <select id="dokan_admin_percentage_type" name="dokan_admin_percentage_type">
297
+ <option value="percentage" <?php selected( $admin_commission_type, 'percentage' ) ?> ><?php esc_html_e( 'Percentage', 'dokan-lite' ) ?></option>
298
+ <option value="flat" <?php selected( $admin_commission_type, 'flat' ) ?>><?php esc_html_e( 'Flat', 'dokan-lite' ) ?></option>
299
  </select>
300
+ <p class="description"><?php esc_html_e( 'Set the commmission type admin gets from this seller', 'dokan-lite' ) ?></p>
301
  </td>
302
  </tr>
303
  <tr>
304
+ <th><?php esc_html_e( 'Admin Commission ', 'dokan-lite' ); ?></th>
305
  <td>
306
  <input type="text" class="small-text" name="dokan_admin_percentage" value="<?php echo esc_attr( $admin_commission ); ?>">
307
 
308
+ <p class="description"><?php esc_html_e( 'It will override the default commission admin gets from each sales', 'dokan-lite' ) ?></p>
309
  </td>
310
  </tr>
311
 
312
  <tr>
313
+ <th><?php esc_html_e( 'Featured vendor', 'dokan-lite' ); ?></th>
314
  <td>
315
  <label for="dokan_feature">
316
  <input type="hidden" name="dokan_feature" value="no">
317
  <input name="dokan_feature" type="checkbox" id="dokan_feature" value="yes" <?php checked( $feature_seller, 'yes' ); ?> />
318
+ <?php esc_html_e( 'Mark as featured vendor', 'dokan-lite' ); ?>
319
  </label>
320
 
321
+ <p class="description"><?php esc_html_e( 'This vendor will be marked as a featured vendor.', 'dokan-lite' ) ?></p>
322
  </td>
323
  </tr>
324
 
325
  <?php do_action( 'dokan_seller_meta_fields', $user ); ?>
326
 
327
+ <?php
328
+ wp_nonce_field( 'dokan_update_user_profile_info', 'dokan_update_user_profile_info_nonce' );
329
+ ?>
330
  </tbody>
331
  </table>
332
 
360
  display:block;
361
  cursor: pointer;
362
  }
363
+ .text-success {
364
+ color: green;
365
+ }
366
+ .text-danger {
367
+ color: red;
368
+ }
369
  </style>
370
 
371
  <script type="text/javascript">
426
  };
427
 
428
  Dokan_Settings.init();
429
+
430
+ $('#seller-url').keydown(function(e) {
431
+ var text = $(this).val();
432
+
433
+ // Allow: backspace, delete, tab, escape, enter and .
434
+ if ($.inArray(e.keyCode, [46, 8, 9, 27, 13, 91, 109, 110, 173, 189, 190]) !== -1 ||
435
+ // Allow: Ctrl+A
436
+ (e.keyCode == 65 && e.ctrlKey === true) ||
437
+ // Allow: home, end, left, right
438
+ (e.keyCode >= 35 && e.keyCode <= 39)) {
439
+ // let it happen, don't do anything
440
+ return;
441
+ }
442
+
443
+ if ((e.shiftKey || (e.keyCode < 65 || e.keyCode > 90) && (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105) ) {
444
+ e.preventDefault();
445
+ }
446
+ });
447
+
448
+ $('#seller-url').keyup(function(e) {
449
+ $('#url-alart').text( getSlug( $(this).val() ) );
450
+ });
451
+
452
+ $('#seller-url').on('focusout', function() {
453
+ var self = $(this),
454
+ data = {
455
+ action : 'shop_url',
456
+ url_slug : self.val(),
457
+ _nonce : dokan_user_profile.nonce,
458
+ };
459
+
460
+ if ( self.val() === '' ) {
461
+ return;
462
+ }
463
+
464
+ var row = self.closest('td');
465
+
466
+ row.block({ message: null, overlayCSS: { background: '#f1f1f1 url(' + dokan_user_profile.ajax_loader + ') no-repeat center', opacity: 0.3 } });
467
+
468
+ $.post( dokan_user_profile.ajaxurl, data, function(resp) {
469
+
470
+ if ( resp.success === true ) {
471
+ $('#url-alart').removeClass('text-danger').addClass('text-success');
472
+ $('#url-alart-mgs').removeClass('text-danger').addClass('text-success').text(dokan_user_profile.seller.available);
473
+ } else {
474
+ $('#url-alart').removeClass('text-success').addClass('text-danger');
475
+ $('#url-alart-mgs').removeClass('text-success').addClass('text-danger').text(dokan_user_profile.seller.notAvailable);
476
+ }
477
+
478
+ row.unblock();
479
+ } );
480
+ });
481
  });
482
  </script>
483
  <?php
495
  return;
496
  }
497
 
498
+ if ( isset( $_POST['dokan_update_user_profile_info_nonce'] ) && ! wp_verify_nonce( $_POST['dokan_update_user_profile_info_nonce'], 'dokan_update_user_profile_info' ) ) {
499
+ return;
500
+ }
501
+
502
  if ( ! isset( $_POST['dokan_enable_selling'] ) ) {
503
  return;
504
  }
505
 
506
  $selling = sanitize_text_field( $_POST['dokan_enable_selling'] );
507
  $publishing = sanitize_text_field( $_POST['dokan_publish'] );
508
+ $percentage = isset( $_POST['dokan_admin_percentage'] ) && $_POST['dokan_admin_percentage'] != '' ? floatval( $_POST['dokan_admin_percentage'] ) : '';
509
  $percentage_type = empty( $_POST['dokan_admin_percentage_type'] ) ? 'percentage' : $_POST['dokan_admin_percentage_type'];
510
  $feature_seller = sanitize_text_field( $_POST['dokan_feature'] );
511
  $store_settings = dokan_get_store_info( $user_id );
527
  }
528
  }
529
 
530
+ wp_update_user( array( 'ID' => $user_id, 'user_nicename' => sanitize_title( $_POST['dokan_store_url'] ) ) );
531
  update_user_meta( $user_id, 'dokan_profile_settings', $store_settings );
532
  update_user_meta( $user_id, 'dokan_enable_selling', $selling );
533
  update_user_meta( $user_id, 'dokan_publishing', $publishing );
538
 
539
  do_action( 'dokan_process_seller_meta_fields', $user_id );
540
  }
541
+ }
classes/admin-withdraw.php CHANGED
@@ -36,10 +36,15 @@ class Dokan_Admin_Withdraw extends Dokan_Withdraw {
36
  * @return void admin
37
  */
38
  function bulk_action_handler() {
 
39
  if ( ! current_user_can( 'manage_woocommerce' ) ) {
40
  return;
41
  }
42
 
 
 
 
 
43
  if ( ! isset( $_POST['dokan_withdraw_bulk'] ) ) {
44
  return;
45
  }
@@ -81,7 +86,7 @@ class Dokan_Admin_Withdraw extends Dokan_Withdraw {
81
  $amount = $_POST['amount'][$key];
82
  $method = $_POST['method'][$key];
83
  $note = $_POST['note'][$key];
84
-
85
  do_action( 'dokan_withdraw_request_cancelled', $user_id, $amount, $method, $note );
86
  $this->update_status( $withdraw_id, $user_id, 2 );
87
  }
@@ -97,7 +102,11 @@ class Dokan_Admin_Withdraw extends Dokan_Withdraw {
97
  $user_id = $_POST['user_id'][$key];
98
  $amount = $_POST['amount'][$key];
99
  $method = $_POST['method'][$key];
100
-
 
 
 
 
101
  $this->update_status( $withdraw_id, $user_id, 1 );
102
  do_action( 'dokan_withdraw_request_approved', $user_id, $amount, $method );
103
  }
@@ -116,8 +125,6 @@ class Dokan_Admin_Withdraw extends Dokan_Withdraw {
116
 
117
  break;
118
  }
119
-
120
-
121
  }
122
 
123
  /**
@@ -159,9 +166,9 @@ class Dokan_Admin_Withdraw extends Dokan_Withdraw {
159
  header( 'Content-Disposition: attachment; filename="withdraw-'.date( 'd-m-y' ).'.csv"' );
160
 
161
  foreach ( $data as $fields ) {
162
- echo $fields['email']. ',';
163
- echo $fields['amount']. ',';
164
- echo $fields['currency'] . "\n";
165
  }
166
 
167
  die();
@@ -202,7 +209,7 @@ class Dokan_Admin_Withdraw extends Dokan_Withdraw {
202
  if ( ! empty( $message ) ) {
203
  ?>
204
  <div class="updated">
205
- <p><strong><?php echo $message; ?></strong></p>
206
  </div>
207
  <?php
208
  }
@@ -216,13 +223,13 @@ class Dokan_Admin_Withdraw extends Dokan_Withdraw {
216
  <td class="check-column">
217
  <input type="checkbox" class="dokan-withdraw-allcheck">
218
  </td>
219
- <th><?php _e( 'User Name', 'dokan-lite' ); ?></th>
220
- <th><?php _e( 'Amount', 'dokan-lite' ); ?></th>
221
- <th><?php _e( 'Method', 'dokan-lite' ); ?></th>
222
- <th><?php _e( 'Method Details', 'dokan-lite' ); ?></th>
223
- <th><?php _e( 'Note', 'dokan-lite' ); ?></th>
224
- <th><?php _e( 'IP', 'dokan-lite' ); ?></th>
225
- <th><?php _e( 'Date', 'dokan-lite' ); ?></th>
226
  </tr>
227
  </thead>
228
  <tfoot>
@@ -230,13 +237,13 @@ class Dokan_Admin_Withdraw extends Dokan_Withdraw {
230
  <td class="check-column">
231
  <input type="checkbox" class="dokan-withdraw-allcheck">
232
  </td>
233
- <th><?php _e( 'User Name', 'dokan-lite' ); ?></th>
234
- <th><?php _e( 'Amount', 'dokan-lite' ); ?></th>
235
- <th><?php _e( 'Method', 'dokan-lite' ); ?></th>
236
- <th><?php _e( 'Method Details', 'dokan-lite' ); ?></th>
237
- <th><?php _e( 'Note', 'dokan-lite' ); ?></th>
238
- <th><?php _e( 'IP', 'dokan-lite' ); ?></th>
239
- <th><?php _e( 'Date', 'dokan-lite' ); ?></th>
240
  </tr>
241
  </tfoot>
242
 
@@ -250,33 +257,33 @@ class Dokan_Admin_Withdraw extends Dokan_Withdraw {
250
  <tr class="<?php echo ( $count % 2 ) == 0 ? 'alternate': 'odd'; ?>">
251
 
252
  <th class="check-column">
253
- <input type="checkbox" name="id[<?php echo $row->id;?>]" value="<?php echo $row->id;?>">
254
- <input type="hidden" name="user_id[<?php echo $row->id;?>]" value="<?php echo $row->user_id; ?>">
255
- <input type="hidden" name="method[<?php echo $row->id;?>]" value="<?php echo esc_attr( $row->method ); ?>">
256
- <input type="hidden" name="amount[<?php echo $row->id;?>]" value="<?php echo esc_attr( $row->amount ); ?>">
257
  </th>
258
  <td>
259
- <strong><a href="<?php echo admin_url( 'user-edit.php?user_id=' . $user_data->ID ); ?>"><?php echo $user_data->user_login; ?></a></strong>
260
  <div class="row-actions">
261
  <?php if ( $status == 'pending' ) { ?>
262
 
263
- <span class="edit"><a href="#" class="dokan-withdraw-action" data-status="approve" data-withdraw_id = "<?php echo $row->id; ?>"><?php _e( 'Approve', 'dokan-lite' ); ?></a> | </span>
264
- <span class="edit"><a href="#" class="dokan-withdraw-action" data-status="cancel" data-withdraw_id = "<?php echo $row->id; ?>"><?php _e( 'Cancel', 'dokan-lite' ); ?></a></span>
265
 
266
  <?php } elseif ( $status == 'completed' ) { ?>
267
 
268
- <span class="edit"><a href="#" class="dokan-withdraw-action" data-status="cancel" data-withdraw_id = "<?php echo $row->id; ?>"><?php _e( 'Cancel', 'dokan-lite' ); ?></a> | </span>
269
- <span class="edit"><a href="#" class="dokan-withdraw-action" data-status="pending" data-withdraw_id = "<?php echo $row->id; ?>"><?php _e( 'Pending', 'dokan-lite' ); ?></a></span>
270
 
271
  <?php } elseif ( $status == 'cancelled' ) { ?>
272
 
273
- <span class="edit"><a href="#" class="dokan-withdraw-action" data-status="approve" data-withdraw_id = "<?php echo $row->id; ?>"><?php _e( 'Approve', 'dokan-lite' ); ?></a> | </span>
274
- <span class="edit"><a href="#" class="dokan-withdraw-action" data-status="pending" data-withdraw_id = "<?php echo $row->id; ?>"><?php _e( 'Pending', 'dokan-lite' ); ?></a></span>
275
 
276
  <?php } ?>
277
 
278
  <?php if ( $result ) { ?>
279
- <span class="trash"> | <a href="#" class="dokan-withdraw-action" data-status="delete" data-withdraw_id = "<?php echo $row->id; ?>"><?php _e( 'Delete', 'dokan-lite' ); ?></a></span>
280
 
281
  <?php } ?>
282
  </div>
@@ -300,14 +307,15 @@ class Dokan_Admin_Withdraw extends Dokan_Withdraw {
300
  <p class="ajax_note"><?php echo $row->note; ?></p>
301
 
302
  <div class="row-actions">
303
- <a href="#" class="dokan-note-field"><?php _e( 'Add note', 'dokan-lite' ); ?></a>
304
  </div>
305
  </div>
306
 
307
  <div class="note-form" style="display: none;">
308
  <p><input type="text" class="dokan-note-text" name="note[<?php echo $row->id;?>]" value="<?php echo esc_attr( $row->note ); ?>"></p>
309
- <a class="dokan-note-submit button" data-id=<?php echo $row->id; ?> href="#" ><?php _e( 'Save', 'dokan-lite' ); ?></a>
310
- <a href="#" class="dokan-note-cancel"><?php _e( 'cancel', 'dokan-lite' ); ?></a>
 
311
  </div>
312
  </div>
313
 
@@ -323,7 +331,7 @@ class Dokan_Admin_Withdraw extends Dokan_Withdraw {
323
  ?>
324
  <tr>
325
  <td colspan="8">
326
- <?php _e( 'No results found', 'dokan-lite' ) ?>
327
  </td>
328
  </tr>
329
  <?php
@@ -335,31 +343,34 @@ class Dokan_Admin_Withdraw extends Dokan_Withdraw {
335
 
336
  <div class="alignleft actions bulkactions">
337
  <select name="dokan_withdraw_bulk">
338
- <option value="-1" selected="selected"><?php _e( 'Bulk Actions', 'dokan-lite' ); ?></option>
339
 
340
  <?php if ( $status == 'pending' ) { ?>
341
 
342
- <option value="approve"><?php _e( 'Approve Requests', 'dokan-lite' ); ?></option>
343
- <option value="cancel"><?php _e( 'Mark as Cancelled', 'dokan-lite' ); ?></option>
344
 
345
  <?php } elseif ( $status == 'completed' ) { ?>
346
 
347
- <option value="cancel"><?php _e( 'Mark as Cancelled', 'dokan-lite' ); ?></option>
348
- <option value="pending"><?php _e( 'Mark Pending', 'dokan-lite' ); ?></option>
349
 
350
  <?php } elseif ( $status == 'cancelled' ) { ?>
351
 
352
- <option value="approve"><?php _e( 'Approve Requests', 'dokan-lite' ); ?></option>
353
- <option value="pending"><?php _e( 'Mark Pending', 'dokan-lite' ); ?></option>
354
 
355
  <?php } ?>
356
 
357
  <?php if ( $result ) { ?>
358
- <option value="delete"><?php _e( 'Delete', 'dokan-lite' ); ?></option>
359
- <option value="paypal"><?php _e( 'Download PayPal mass payment file', 'dokan-lite' ); ?></option>
360
  <?php } ?>
361
  </select>
362
 
 
 
 
363
  <input type="hidden" name="status_page" value="<?php echo $status; ?>">
364
  <input type="submit" name="" id="doaction2" class="button button-primary" value="<?php esc_attr_e( 'Apply', 'dokan-lite' ); ?>">
365
  </div>
@@ -370,8 +381,8 @@ class Dokan_Admin_Withdraw extends Dokan_Withdraw {
370
  $page_links = paginate_links( array(
371
  'base' => add_query_arg( 'paged', '%#%' ),
372
  'format' => '',
373
- 'prev_text' => __( '&laquo;', 'aag' ),
374
- 'next_text' => __( '&raquo;', 'aag' ),
375
  'total' => $num_of_pages,
376
  'current' => $pagenum
377
  ) );
@@ -463,10 +474,12 @@ class Dokan_Admin_Withdraw extends Dokan_Withdraw {
463
  form_wrap = self.closest('.note-form'),
464
  row_id = self.data('id'),
465
  note = form_wrap.find('input.dokan-note-text').val(),
 
466
  data = {
467
  'action': 'note',
468
  'row_id': row_id,
469
  'note': note,
 
470
  };
471
 
472
  $.post( '<?php echo admin_url( 'admin-ajax.php' ); ?>', data, function(resp) {
36
  * @return void admin
37
  */
38
  function bulk_action_handler() {
39
+
40
  if ( ! current_user_can( 'manage_woocommerce' ) ) {
41
  return;
42
  }
43
 
44
+ if ( isset( $_POST['dokan_admin_withdraw_bulk_nonce'] ) && ! wp_verify_nonce( $_POST['dokan_admin_withdraw_bulk_nonce'], 'dokan_admin_withdraw_bulk_action' ) ) {
45
+ return;
46
+ }
47
+
48
  if ( ! isset( $_POST['dokan_withdraw_bulk'] ) ) {
49
  return;
50
  }
86
  $amount = $_POST['amount'][$key];
87
  $method = $_POST['method'][$key];
88
  $note = $_POST['note'][$key];
89
+
90
  do_action( 'dokan_withdraw_request_cancelled', $user_id, $amount, $method, $note );
91
  $this->update_status( $withdraw_id, $user_id, 2 );
92
  }
102
  $user_id = $_POST['user_id'][$key];
103
  $amount = $_POST['amount'][$key];
104
  $method = $_POST['method'][$key];
105
+
106
+ if ( dokan_get_seller_balance( $user_id, false ) < $amount ) {
107
+ continue;
108
+ }
109
+
110
  $this->update_status( $withdraw_id, $user_id, 1 );
111
  do_action( 'dokan_withdraw_request_approved', $user_id, $amount, $method );
112
  }
125
 
126
  break;
127
  }
 
 
128
  }
129
 
130
  /**
166
  header( 'Content-Disposition: attachment; filename="withdraw-'.date( 'd-m-y' ).'.csv"' );
167
 
168
  foreach ( $data as $fields ) {
169
+ echo esc_html( $fields['email'] ) . ',';
170
+ echo esc_html( $fields['amount'] ) . ',';
171
+ echo esc_html( $fields['currency'] ) . "\n";
172
  }
173
 
174
  die();
209
  if ( ! empty( $message ) ) {
210
  ?>
211
  <div class="updated">
212
+ <p><strong><?php echo esc_html( $message ); ?></strong></p>
213
  </div>
214
  <?php
215
  }
223
  <td class="check-column">
224
  <input type="checkbox" class="dokan-withdraw-allcheck">
225
  </td>
226
+ <th><?php esc_html_e( 'User Name', 'dokan-lite' ); ?></th>
227
+ <th><?php esc_html_e( 'Amount', 'dokan-lite' ); ?></th>
228
+ <th><?php esc_html_e( 'Method', 'dokan-lite' ); ?></th>
229
+ <th><?php esc_html_e( 'Method Details', 'dokan-lite' ); ?></th>
230
+ <th><?php esc_html_e( 'Note', 'dokan-lite' ); ?></th>
231
+ <th><?php esc_html_e( 'IP', 'dokan-lite' ); ?></th>
232
+ <th><?php esc_html_e( 'Date', 'dokan-lite' ); ?></th>
233
  </tr>
234
  </thead>
235
  <tfoot>
237
  <td class="check-column">
238
  <input type="checkbox" class="dokan-withdraw-allcheck">
239
  </td>
240
+ <th><?php esc_html_e( 'User Name', 'dokan-lite' ); ?></th>
241
+ <th><?php esc_html_e( 'Amount', 'dokan-lite' ); ?></th>
242
+ <th><?php esc_html_e( 'Method', 'dokan-lite' ); ?></th>
243
+ <th><?php esc_html_e( 'Method Details', 'dokan-lite' ); ?></th>
244
+ <th><?php esc_html_e( 'Note', 'dokan-lite' ); ?></th>
245
+ <th><?php esc_html_e( 'IP', 'dokan-lite' ); ?></th>
246
+ <th><?php esc_html_e( 'Date', 'dokan-lite' ); ?></th>
247
  </tr>
248
  </tfoot>
249
 
257
  <tr class="<?php echo ( $count % 2 ) == 0 ? 'alternate': 'odd'; ?>">
258
 
259
  <th class="check-column">
260
+ <input type="checkbox" name="id[<?php echo esc_attr( $row->id );?>]" value="<?php echo esc_attr( $row->id )?>">
261
+ <input type="hidden" name="user_id[<?php echo esc_attr( $row->id );?>]" value="<?php echo esc_attr( $row->user_id ); ?>">
262
+ <input type="hidden" name="method[<?php echo esc_attr( $row->id );?>]" value="<?php echo esc_attr( $row->method ); ?>">
263
+ <input type="hidden" name="amount[<?php echo esc_attr( $row->id );?>]" value="<?php echo esc_attr( $row->amount ); ?>">
264
  </th>
265
  <td>
266
+ <strong><a href="<?php echo esc_attr( admin_url( 'user-edit.php?user_id=' . $user_data->ID ) ) ?>"><?php echo esc_attr( $user_data->user_login ); ?></a></strong>
267
  <div class="row-actions">
268
  <?php if ( $status == 'pending' ) { ?>
269
 
270
+ <span class="edit"><a href="#" class="dokan-withdraw-action" data-status="approve" data-withdraw_id = "<?php echo esc_attr( $row->id ); ?>"><?php esc_html_e( 'Approve', 'dokan-lite' ); ?></a> | </span>
271
+ <span class="edit"><a href="#" class="dokan-withdraw-action" data-status="cancel" data-withdraw_id = "<?php echo esc_attr( $row->id ); ?>"><?php esc_html_e( 'Cancel', 'dokan-lite' ); ?></a></span>
272
 
273
  <?php } elseif ( $status == 'completed' ) { ?>
274
 
275
+ <span class="edit"><a href="#" class="dokan-withdraw-action" data-status="cancel" data-withdraw_id = "<?php echo esc_attr( $row->id ); ?>"><?php esc_html_e( 'Cancel', 'dokan-lite' ); ?></a> | </span>
276
+ <span class="edit"><a href="#" class="dokan-withdraw-action" data-status="pending" data-withdraw_id = "<?php echo esc_attr( $row->id ); ?>"><?php esc_html_e( 'Pending', 'dokan-lite' ); ?></a></span>
277
 
278
  <?php } elseif ( $status == 'cancelled' ) { ?>
279
 
280
+ <span class="edit"><a href="#" class="dokan-withdraw-action" data-status="approve" data-withdraw_id = "<?php echo esc_attr( $row->id ); ?>"><?php esc_html_e( 'Approve', 'dokan-lite' ); ?></a> | </span>
281
+ <span class="edit"><a href="#" class="dokan-withdraw-action" data-status="pending" data-withdraw_id = "<?php echo esc_attr( $row->id ); ?>"><?php esc_html_e( 'Pending', 'dokan-lite' ); ?></a></span>
282
 
283
  <?php } ?>
284
 
285
  <?php if ( $result ) { ?>
286
+ <span class="trash"> | <a href="#" class="dokan-withdraw-action" data-status="delete" data-withdraw_id = "<?php echo esc_attr( $row->id ); ?>"><?php esc_html_e( 'Delete', 'dokan-lite' ); ?></a></span>
287
 
288
  <?php } ?>
289
  </div>
307
  <p class="ajax_note"><?php echo $row->note; ?></p>
308
 
309
  <div class="row-actions">
310
+ <a href="#" class="dokan-note-field"><?php esc_html_e( 'Add note', 'dokan-lite' ); ?></a>
311
  </div>
312
  </div>
313
 
314
  <div class="note-form" style="display: none;">
315
  <p><input type="text" class="dokan-note-text" name="note[<?php echo $row->id;?>]" value="<?php echo esc_attr( $row->note ); ?>"></p>
316
+ <?php wp_nonce_field( 'dokan_admin_action', 'dokan_admin_nonce' ); ?>
317
+ <a class="dokan-note-submit button" data-id=<?php echo $row->id; ?> href="#" ><?php esc_html_e( 'Save', 'dokan-lite' ); ?></a>
318
+ <a href="#" class="dokan-note-cancel"><?php esc_html_e( 'cancel', 'dokan-lite' ); ?></a>
319
  </div>
320
  </div>
321
 
331
  ?>
332
  <tr>
333
  <td colspan="8">
334
+ <?php esc_html_e( 'No results found', 'dokan-lite' ) ?>
335
  </td>
336
  </tr>
337
  <?php
343
 
344
  <div class="alignleft actions bulkactions">
345
  <select name="dokan_withdraw_bulk">
346
+ <option value="-1" selected="selected"><?php esc_html_e( 'Bulk Actions', 'dokan-lite' ); ?></option>
347
 
348
  <?php if ( $status == 'pending' ) { ?>
349
 
350
+ <option value="approve"><?php esc_html_e( 'Approve Requests', 'dokan-lite' ); ?></option>
351
+ <option value="cancel"><?php esc_html_e( 'Mark as Cancelled', 'dokan-lite' ); ?></option>
352
 
353
  <?php } elseif ( $status == 'completed' ) { ?>
354
 
355
+ <option value="cancel"><?php esc_html_e( 'Mark as Cancelled', 'dokan-lite' ); ?></option>
356
+ <option value="pending"><?php esc_html_e( 'Mark Pending', 'dokan-lite' ); ?></option>
357
 
358
  <?php } elseif ( $status == 'cancelled' ) { ?>
359
 
360
+ <option value="approve"><?php esc_html_e( 'Approve Requests', 'dokan-lite' ); ?></option>
361
+ <option value="pending"><?php esc_html_e( 'Mark Pending', 'dokan-lite' ); ?></option>
362
 
363
  <?php } ?>
364
 
365
  <?php if ( $result ) { ?>
366
+ <option value="delete"><?php esc_html_e( 'Delete', 'dokan-lite' ); ?></option>
367
+ <option value="paypal"><?php esc_html_e( 'Download PayPal mass payment file', 'dokan-lite' ); ?></option>
368
  <?php } ?>
369
  </select>
370
 
371
+ <?php
372
+ wp_nonce_field( 'dokan_admin_withdraw_bulk_action', 'dokan_admin_withdraw_bulk_nonce' );
373
+ ?>
374
  <input type="hidden" name="status_page" value="<?php echo $status; ?>">
375
  <input type="submit" name="" id="doaction2" class="button button-primary" value="<?php esc_attr_e( 'Apply', 'dokan-lite' ); ?>">
376
  </div>
381
  $page_links = paginate_links( array(
382
  'base' => add_query_arg( 'paged', '%#%' ),
383
  'format' => '',
384
+ 'prev_text' => __( '&laquo;', 'dokan-lite' ),
385
+ 'next_text' => __( '&raquo;', 'dokan-lite' ),
386
  'total' => $num_of_pages,
387
  'current' => $pagenum
388
  ) );
474
  form_wrap = self.closest('.note-form'),
475
  row_id = self.data('id'),
476
  note = form_wrap.find('input.dokan-note-text').val(),
477
+ nonce = form_wrap.find('input#dokan_admin_nonce').val(),
478
  data = {
479
  'action': 'note',
480
  'row_id': row_id,
481
  'note': note,
482
+ 'dokan_admin_nonce' : nonce
483
  };
484
 
485
  $.post( '<?php echo admin_url( 'admin-ajax.php' ); ?>', data, function(resp) {
classes/ajax.php CHANGED
@@ -52,13 +52,9 @@ class Dokan_Ajax {
52
  add_action( 'wp_ajax_dokan_revoke_access_to_download', array( $this, 'revoke_access_to_download' ) );
53
  add_action( 'wp_ajax_nopriv_dokan_revoke_access_to_download', array( $this, 'revoke_access_to_download' ) );
54
 
55
- add_action( 'wp_ajax_dokan_toggle_seller', array( $this, 'toggle_seller_status' ) );
56
-
57
  add_action( 'wp_ajax_shop_url', array($this, 'shop_url_check') );
58
  add_action( 'wp_ajax_nopriv_shop_url', array($this, 'shop_url_check') );
59
 
60
- add_filter( 'woocommerce_cart_item_name', array($this, 'seller_info_checkout'), 10, 2 );
61
-
62
  add_action( 'wp_ajax_dokan_seller_listing_search', array($this, 'seller_listing_search') );
63
  add_action( 'wp_ajax_nopriv_dokan_seller_listing_search', array($this, 'seller_listing_search') );
64
 
@@ -80,6 +76,10 @@ class Dokan_Ajax {
80
  function create_product() {
81
  check_ajax_referer( 'dokan_reviews' );
82
 
 
 
 
 
83
  parse_str( $_POST['postdata'], $postdata );
84
 
85
  $response = dokan_save_product( $postdata );
@@ -89,28 +89,18 @@ class Dokan_Ajax {
89
  }
90
 
91
  if ( is_int( $response ) ) {
92
- wp_send_json_success( dokan_edit_product_url( $response ) );
 
 
 
 
 
 
93
  } else {
94
  wp_send_json_error( __( 'Something wrong, please try again later', 'dokan-lite' ) );
95
  }
96
  }
97
 
98
- /**
99
- * Injects seller name on checkout page
100
- *
101
- * @param array $item_data
102
- * @param array $cart_item
103
- * @return array
104
- */
105
- function seller_info_checkout( $item_data, $cart_item ) {
106
- $seller_id = get_post_field( 'post_author', $cart_item['data']->get_id() );
107
- $info = dokan_get_store_info( $seller_id );
108
- $seller = sprintf( __( '<br><strong> Vendor:</strong> %s', 'dokan-lite' ), $info['store_name'] );
109
- $data = $item_data . $seller;
110
-
111
- return apply_filters( 'dokan_seller_info_checkout', $data, $info, $item_data, $cart_item );
112
- }
113
-
114
  /**
115
  * shop url check
116
  */
@@ -141,7 +131,10 @@ class Dokan_Ajax {
141
  }
142
  }
143
 
144
- echo $check;
 
 
 
145
  }
146
 
147
  /**
@@ -167,7 +160,7 @@ class Dokan_Ajax {
167
  die();
168
  }
169
 
170
- if ( !dokan_is_seller_has_order( get_current_user_id(), $order_id ) ) {
171
  wp_die( __( 'You do not have permission to change this order', 'dokan-lite' ) );
172
  }
173
 
@@ -201,7 +194,7 @@ class Dokan_Ajax {
201
  die();
202
  }
203
 
204
- if ( !dokan_is_seller_has_order( get_current_user_id(), $order_id ) ) {
205
  wp_die( __( 'You do not have permission to change this order', 'dokan-lite' ) );
206
  }
207
 
@@ -274,6 +267,11 @@ class Dokan_Ajax {
274
 
275
  check_ajax_referer( 'dokan_change_status' );
276
 
 
 
 
 
 
277
  $order_id = intval( $_POST['order_id'] );
278
  $order_status = $_POST['order_status'];
279
 
@@ -284,8 +282,9 @@ class Dokan_Ajax {
284
  $status_label = isset( $statuses[$order_status] ) ? $statuses[$order_status] : $order_status;
285
  $status_class = dokan_get_order_status_class( $order_status );
286
 
287
- echo '<label class="dokan-label dokan-label-' . $status_class . '">' . $status_label . '</label>';
288
- exit;
 
289
  }
290
 
291
  /**
@@ -294,10 +293,11 @@ class Dokan_Ajax {
294
  * Catches the form submission from store page
295
  */
296
  function contact_seller() {
297
- $posted = $_POST;
298
 
299
  check_ajax_referer( 'dokan_contact_seller' );
300
 
 
 
301
  $contact_name = sanitize_text_field( $posted['name'] );
302
  $contact_email = sanitize_text_field( $posted['email'] );
303
  $contact_message = strip_tags( $posted['message'] );
@@ -357,7 +357,7 @@ class Dokan_Ajax {
357
  if ( !is_user_logged_in() ) {
358
  die(-1);
359
  }
360
- if ( ! current_user_can( 'dokandar' ) ) {
361
  die(-1);
362
  }
363
 
@@ -390,12 +390,14 @@ class Dokan_Ajax {
390
  */
391
  public function add_shipping_tracking_info() {
392
 
393
- check_ajax_referer( 'add-shipping-tracking-info', 'security' );
 
 
394
 
395
  if ( !is_user_logged_in() ) {
396
  die(-1);
397
  }
398
- if ( ! current_user_can( 'dokandar' ) ) {
399
  die(-1);
400
  }
401
 
@@ -424,7 +426,7 @@ class Dokan_Ajax {
424
  'comment_content' => $ship_info,
425
  'comment_type' => 'order_note',
426
  'comment_parent' => 0,
427
- 'user_id' => get_current_user_id(),
428
  'comment_author_IP' => $_SERVER['REMOTE_ADDR'],
429
  'comment_agent' => $_SERVER['HTTP_USER_AGENT'],
430
  'comment_date' => $time,
@@ -445,6 +447,8 @@ class Dokan_Ajax {
445
  echo wpautop( wptexturize( $ship_info ) );
446
  echo '</div><p class="meta"><a href="#" class="delete_note">'.__( 'Delete', 'dokan-lite' ).'</a></p>';
447
  echo '</li>';
 
 
448
  }
449
 
450
  // Quit out
@@ -476,85 +480,6 @@ class Dokan_Ajax {
476
  die();
477
  }
478
 
479
- /**
480
- * Enable/disable seller selling capability from admin seller listing page
481
- *
482
- * @return type
483
- */
484
- function toggle_seller_status() {
485
- if ( ! current_user_can( 'manage_options' ) ) {
486
- return;
487
- }
488
-
489
- $user_id = isset( $_POST['user_id'] ) ? intval( $_POST['user_id'] ) : 0;
490
- $status = sanitize_text_field( $_POST['type'] );
491
-
492
- if ( $user_id && in_array( $status, array( 'yes', 'no' ) ) ) {
493
- update_user_meta( $user_id, 'dokan_enable_selling', $status );
494
-
495
- if ( $status == 'no' ) {
496
- $this->make_products_pending( $user_id );
497
- } else {
498
- $this->make_products_published( $user_id );
499
- }
500
- }
501
-
502
- wp_send_json_success();
503
- exit;
504
- }
505
-
506
- /**
507
- * Make all the products to pending once a seller is deactivated for selling
508
- *
509
- * @param int $seller_id
510
- */
511
- function make_products_pending( $seller_id ) {
512
- $args = array(
513
- 'post_type' => 'product',
514
- 'post_status' => 'publish',
515
- 'posts_per_page' => -1,
516
- 'author' => $seller_id,
517
- 'orderby' => 'post_date',
518
- 'order' => 'DESC'
519
- );
520
-
521
- $product_query = new WP_Query( $args );
522
- $products = $product_query->get_posts();
523
-
524
- if ( $products ) {
525
- foreach ($products as $pro) {
526
- update_post_meta( $pro->ID, 'inactive_product_flag', 'yes' );
527
- wp_update_post( array( 'ID' => $pro->ID, 'post_status' => 'pending' ) );
528
- }
529
- }
530
- }
531
-
532
- /**
533
- * Make all the products to published once a seller is activated for selling
534
- *
535
- * @param int $seller_id
536
- */
537
- function make_products_published( $seller_id ) {
538
- $args = array(
539
- 'post_type' => 'product',
540
- 'post_status' => 'pending',
541
- 'posts_per_page' => -1,
542
- 'author' => $seller_id,
543
- 'orderby' => 'post_date',
544
- 'order' => 'DESC',
545
- 'meta_key' => 'inactive_product_flag'
546
- );
547
-
548
- $product_query = new WP_Query( $args );
549
- $products = $product_query->get_posts();
550
-
551
- if ( $products ) {
552
- foreach ($products as $pro) {
553
- wp_update_post( array( 'ID' => $pro->ID, 'post_status' => 'publish' ) );
554
- }
555
- }
556
- }
557
-
558
  /**
559
  * Search seller listing
560
  *
@@ -626,9 +551,8 @@ class Dokan_Ajax {
626
  * @return void
627
  */
628
  public function crop_store_banner() {
629
- check_ajax_referer( 'image_editor-' . $_POST['id'], 'nonce' );
630
 
631
- if ( !current_user_can( 'edit_post', $_POST['id'] ) ) {
632
  wp_send_json_error();
633
  }
634
 
@@ -652,7 +576,7 @@ class Dokan_Ajax {
652
  );
653
 
654
  if ( ! $cropped || is_wp_error( $cropped ) ) {
655
- wp_send_json_error( array( 'message' => __( 'Image could not be processed. Please go back and try again.' ) ) );
656
  }
657
 
658
  /** This filter is documented in wp-admin/custom-header.php */
52
  add_action( 'wp_ajax_dokan_revoke_access_to_download', array( $this, 'revoke_access_to_download' ) );
53
  add_action( 'wp_ajax_nopriv_dokan_revoke_access_to_download', array( $this, 'revoke_access_to_download' ) );
54
 
 
 
55
  add_action( 'wp_ajax_shop_url', array($this, 'shop_url_check') );
56
  add_action( 'wp_ajax_nopriv_shop_url', array($this, 'shop_url_check') );
57
 
 
 
58
  add_action( 'wp_ajax_dokan_seller_listing_search', array($this, 'seller_listing_search') );
59
  add_action( 'wp_ajax_nopriv_dokan_seller_listing_search', array($this, 'seller_listing_search') );
60
 
76
  function create_product() {
77
  check_ajax_referer( 'dokan_reviews' );
78
 
79
+ if ( ! current_user_can( 'dokan_add_product' ) ) {
80
+ wp_send_json_error( __( 'You have no permission to do this action', 'dokan-lite' ) );
81
+ }
82
+
83
  parse_str( $_POST['postdata'], $postdata );
84
 
85
  $response = dokan_save_product( $postdata );
89
  }
90
 
91
  if ( is_int( $response ) ) {
92
+ if ( current_user_can( 'dokan_edit_product' ) ) {
93
+ $redirect = dokan_edit_product_url( $response );
94
+ } else {
95
+ $redirect = dokan_get_navigation_url( 'products' );
96
+ }
97
+
98
+ wp_send_json_success( $redirect );
99
  } else {
100
  wp_send_json_error( __( 'Something wrong, please try again later', 'dokan-lite' ) );
101
  }
102
  }
103
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
104
  /**
105
  * shop url check
106
  */
131
  }
132
  }
133
 
134
+ wp_send_json_success( array(
135
+ 'message' => __( 'Available', 'dokan-lite' ),
136
+ 'url' => sanitize_user( $url_slug )
137
+ ) );
138
  }
139
 
140
  /**
160
  die();
161
  }
162
 
163
+ if ( ! dokan_is_seller_has_order( dokan_get_current_user_id(), $order_id ) ) {
164
  wp_die( __( 'You do not have permission to change this order', 'dokan-lite' ) );
165
  }
166
 
194
  die();
195
  }
196
 
197
+ if ( ! dokan_is_seller_has_order( dokan_get_current_user_id(), $order_id ) ) {
198
  wp_die( __( 'You do not have permission to change this order', 'dokan-lite' ) );
199
  }
200
 
267
 
268
  check_ajax_referer( 'dokan_change_status' );
269
 
270
+ if ( ! current_user_can( 'dokan_manage_order' ) ) {
271
+ wp_send_json_error( __( 'You have no permission to manage this order', 'dokan-lite' ) );
272
+ return;
273
+ }
274
+
275
  $order_id = intval( $_POST['order_id'] );
276
  $order_status = $_POST['order_status'];
277
 
282
  $status_label = isset( $statuses[$order_status] ) ? $statuses[$order_status] : $order_status;
283
  $status_class = dokan_get_order_status_class( $order_status );
284
 
285
+ $html = '<label class="dokan-label dokan-label-' . esc_attr( $status_class ) . '">' . esc_attr( $status_label ) . '</label>';
286
+
287
+ wp_send_json_success( $html );
288
  }
289
 
290
  /**
293
  * Catches the form submission from store page
294
  */
295
  function contact_seller() {
 
296
 
297
  check_ajax_referer( 'dokan_contact_seller' );
298
 
299
+ $posted = $_POST;
300
+
301
  $contact_name = sanitize_text_field( $posted['name'] );
302
  $contact_email = sanitize_text_field( $posted['email'] );
303
  $contact_message = strip_tags( $posted['message'] );
357
  if ( !is_user_logged_in() ) {
358
  die(-1);
359
  }
360
+ if ( ! current_user_can( 'dokan_manage_order_note' ) ) {
361
  die(-1);
362
  }
363
 
390
  */
391
  public function add_shipping_tracking_info() {
392
 
393
+ if ( isset( $_POST['dokan_security_nonce'] ) && !wp_verify_nonce( sanitize_key( $_POST['dokan_security_nonce'] ), 'dokan_security_action' ) ) {
394
+ die(-1);
395
+ }
396
 
397
  if ( !is_user_logged_in() ) {
398
  die(-1);
399
  }
400
+ if ( ! current_user_can( 'dokan_manage_order_note' ) ) {
401
  die(-1);
402
  }
403
 
426
  'comment_content' => $ship_info,
427
  'comment_type' => 'order_note',
428
  'comment_parent' => 0,
429
+ 'user_id' => dokan_get_current_user_id(),
430
  'comment_author_IP' => $_SERVER['REMOTE_ADDR'],
431
  'comment_agent' => $_SERVER['HTTP_USER_AGENT'],
432
  'comment_date' => $time,
447
  echo wpautop( wptexturize( $ship_info ) );
448
  echo '</div><p class="meta"><a href="#" class="delete_note">'.__( 'Delete', 'dokan-lite' ).'</a></p>';
449
  echo '</li>';
450
+
451
+ do_action( 'dokan_order_tracking_updated', $post_id, dokan_get_current_user_id() );
452
  }
453
 
454
  // Quit out
480
  die();
481
  }
482
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
483
  /**
484
  * Search seller listing
485
  *
551
  * @return void
552
  */
553
  public function crop_store_banner() {
 
554
 
555
+ if ( ! dokan_is_user_seller( get_current_user_id() ) ) {
556
  wp_send_json_error();
557
  }
558
 
576
  );
577
 
578
  if ( ! $cropped || is_wp_error( $cropped ) ) {
579
+ wp_send_json_error( array( 'message' => __( 'Image could not be processed. Please go back and try again.', 'dokan-lite' ) ) );
580
  }
581
 
582
  /** This filter is documented in wp-admin/custom-header.php */
classes/installer.php CHANGED
@@ -133,25 +133,58 @@ class Dokan_Installer {
133
  }
134
 
135
  add_role( 'seller', __( 'Vendor', 'dokan-lite' ), array(
136
- 'read' => true,
137
- 'publish_posts' => true,
138
- 'edit_posts' => true,
139
- 'delete_published_posts' => true,
140
- 'edit_published_posts' => true,
141
- 'delete_posts' => true,
142
- 'manage_categories' => true,
143
- 'moderate_comments' => true,
144
- 'unfiltered_html' => true,
145
- 'upload_files' => true,
146
- 'edit_shop_orders' => true,
147
- 'edit_product' => true,
148
- 'dokandar' => true
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
149
  ) );
150
 
 
 
 
 
 
 
 
151
  $wp_roles->add_cap( 'shop_manager', 'dokandar' );
152
  $wp_roles->add_cap( 'administrator', 'dokandar' );
 
 
 
 
 
 
153
  }
154
 
 
 
 
 
 
155
  function setup_pages() {
156
  $meta_key = '_wp_page_template';
157
 
@@ -237,6 +270,13 @@ class Dokan_Installer {
237
  return false;
238
  }
239
 
 
 
 
 
 
 
 
240
  function create_tables() {
241
  include_once ABSPATH . 'wp-admin/includes/upgrade.php';
242
 
@@ -246,6 +286,11 @@ class Dokan_Installer {
246
  $this->create_refund_table();
247
  }
248
 
 
 
 
 
 
249
  function create_withdraw_table() {
250
  global $wpdb;
251
 
@@ -257,13 +302,18 @@ class Dokan_Installer {
257
  `status` int(1) NOT NULL,
258
  `method` varchar(30) NOT NULL,
259
  `note` text NOT NULL,
260
- `ip` varchar(25) NOT NULL,
261
  PRIMARY KEY (id)
262
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;";
263
 
264
  dbDelta( $sql );
265
  }
266
 
 
 
 
 
 
267
  function create_sync_table() {
268
  global $wpdb;
269
 
@@ -271,8 +321,8 @@ class Dokan_Installer {
271
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
272
  `order_id` bigint(20) DEFAULT NULL,
273
  `seller_id` bigint(20) DEFAULT NULL,
274
- `order_total` float(11,2) DEFAULT NULL,
275
- `net_amount` float(11,2) DEFAULT NULL,
276
  `order_status` varchar(30) DEFAULT NULL,
277
  PRIMARY KEY (`id`),
278
  KEY `order_id` (`order_id`),
@@ -304,8 +354,6 @@ class Dokan_Installer {
304
 
305
  require_once ABSPATH . 'wp-admin/includes/upgrade.php';
306
  dbDelta( $sql );
307
-
308
-
309
  }
310
 
311
  /**
133
  }
134
 
135
  add_role( 'seller', __( 'Vendor', 'dokan-lite' ), array(
136
+ 'read' => true,
137
+ 'publish_posts' => true,
138
+ 'edit_posts' => true,
139
+ 'delete_published_posts' => true,
140
+ 'edit_published_posts' => true,
141
+ 'delete_posts' => true,
142
+ 'manage_categories' => true,
143
+ 'moderate_comments' => true,
144
+ 'unfiltered_html' => true,
145
+ 'upload_files' => true,
146
+ 'edit_shop_orders' => true,
147
+ 'edit_product' => true,
148
+ 'read_product' => true,
149
+ 'delete_product' => true,
150
+ 'edit_products' => true,
151
+ 'publish_products' => true,
152
+ 'read_private_products' => true,
153
+ 'delete_products' => true,
154
+ 'delete_products' => true,
155
+ 'delete_private_products' => true,
156
+ 'delete_published_products' => true,
157
+ 'delete_published_products' => true,
158
+ 'edit_private_products' => true,
159
+ 'edit_published_products' => true,
160
+ 'manage_product_terms' => true,
161
+ 'delete_product_terms' => true,
162
+ 'assign_product_terms' => true,
163
+ 'dokandar' => true
164
  ) );
165
 
166
+ $capabilities = array();
167
+ $all_cap = dokan_get_all_caps();
168
+
169
+ foreach( $all_cap as $key=>$cap ) {
170
+ $capabilities = array_merge( $capabilities, $cap );
171
+ }
172
+
173
  $wp_roles->add_cap( 'shop_manager', 'dokandar' );
174
  $wp_roles->add_cap( 'administrator', 'dokandar' );
175
+
176
+ foreach ( $capabilities as $key => $capability ) {
177
+ $wp_roles->add_cap( 'seller', $capability );
178
+ $wp_roles->add_cap( 'administrator', $capability );
179
+ $wp_roles->add_cap( 'shop_manager', $capability );
180
+ }
181
  }
182
 
183
+ /**
184
+ * Setup all pages for dokan
185
+ *
186
+ * @return void
187
+ */
188
  function setup_pages() {
189
  $meta_key = '_wp_page_template';
190
 
270
  return false;
271
  }
272
 
273
+ /**
274
+ * Create necessary tables
275
+ *
276
+ * @since 1.4
277
+ *
278
+ * @return void
279
+ */
280
  function create_tables() {
281
  include_once ABSPATH . 'wp-admin/includes/upgrade.php';
282
 
286
  $this->create_refund_table();
287
  }
288
 
289
+ /**
290
+ * Create withdraw tabless
291
+ *
292
+ * @return void
293
+ */
294
  function create_withdraw_table() {
295
  global $wpdb;
296
 
302
  `status` int(1) NOT NULL,
303
  `method` varchar(30) NOT NULL,
304
  `note` text NOT NULL,
305
+ `ip` varchar(50) NOT NULL,
306
  PRIMARY KEY (id)
307
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;";
308
 
309
  dbDelta( $sql );
310
  }
311
 
312
+ /**
313
+ * Create order sync table
314
+ *
315
+ * @return void
316
+ */
317
  function create_sync_table() {
318
  global $wpdb;
319
 
321
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
322
  `order_id` bigint(20) DEFAULT NULL,
323
  `seller_id` bigint(20) DEFAULT NULL,
324
+ `order_total` float(11,4) DEFAULT NULL,
325
+ `net_amount` float(11,4) DEFAULT NULL,
326
  `order_status` varchar(30) DEFAULT NULL,
327
  PRIMARY KEY (`id`),
328
  KEY `order_id` (`order_id`),
354
 
355
  require_once ABSPATH . 'wp-admin/includes/upgrade.php';
356
  dbDelta( $sql );
 
 
357
  }
358
 
359
  /**
classes/pageviews.php CHANGED
@@ -9,29 +9,38 @@ class Dokan_Pageviews {
9
 
10
  public function __construct() {
11
  /* Registers the entry views extension scripts if we're on the correct page. */
12
- add_action( 'template_redirect', array($this, 'load_views'), 25 );
13
 
14
  /* Add the entry views AJAX actions to the appropriate hooks. */
15
- add_action( 'wp_ajax_dokan_pageview', array($this, 'update_ajax') );
16
- add_action( 'wp_ajax_nopriv_dokan_pageview', array($this, 'update_ajax') );
17
- }
18
 
19
- function load_scripts() {
 
 
20
 
 
21
  $nonce = wp_create_nonce( 'dokan_pageview' );
22
 
23
- echo '<script type="text/javascript">/* <![CDATA[ */ jQuery(document).ready( function($) { $.post( "' . admin_url( 'admin-ajax.php' ) . '", { action : "dokan_pageview", _ajax_nonce : "' . $nonce . '", post_id : ' . get_the_ID() . ' } ); } ); /* ]]> */</script>' . "\n";
 
 
 
 
 
 
 
 
 
24
  }
25
 
26
- function load_views() {
27
-
28
  if ( is_singular( 'product' ) ) {
29
  global $post;
30
 
31
  if ( empty( $_COOKIE['dokan_product_viewed'] ) ) {
32
  $dokan_viewed_products = array();
33
- }
34
- else {
35
  $dokan_viewed_products = (array) explode( ',', $_COOKIE['dokan_product_viewed'] );
36
  }
37
 
@@ -39,19 +48,15 @@ class Dokan_Pageviews {
39
  $dokan_viewed_products[] = $post->ID;
40
 
41
  wp_enqueue_script( 'jquery' );
42
-
43
  add_action( 'wp_footer', array($this, 'load_scripts') );
44
  }
45
-
46
  // Store for single product view
47
  setcookie( 'dokan_product_viewed', implode( ',', $dokan_viewed_products ) );
48
  }
49
  }
50
 
51
- function update_view( $post_id = '' ) {
52
-
53
- if ( !empty( $post_id ) ) {
54
-
55
  $old_views = get_post_meta( $post_id, $this->meta_key, true );
56
  $new_views = absint( $old_views ) + 1;
57
 
@@ -59,18 +64,223 @@ class Dokan_Pageviews {
59
  }
60
  }
61
 
62
- function update_ajax() {
63
-
64
  check_ajax_referer( 'dokan_pageview' );
65
 
66
  if ( isset( $_POST['post_id'] ) ) {
67
  $post_id = absint( $_POST['post_id'] );
68
  }
69
 
70
- if ( !empty( $post_id ) ) {
71
  $this->update_view( $post_id );
72
  }
73
 
74
- exit;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
75
  }
76
  }
9
 
10
  public function __construct() {
11
  /* Registers the entry views extension scripts if we're on the correct page. */
12
+ add_action( 'template_redirect', array( $this, 'load_views' ), 25 );
13
 
14
  /* Add the entry views AJAX actions to the appropriate hooks. */
15
+ add_action( 'wp_ajax_dokan_pageview', array( $this, 'update_ajax' ) );
16
+ add_action( 'wp_ajax_nopriv_dokan_pageview', array( $this, 'update_ajax' ) );
 
17
 
18
+ /* Register vendor registration shortcode */
19
+ add_shortcode( 'dokan-vendor-registration', array( $this, 'vendor_registration_shortcode' ) );
20
+ }
21
 
22
+ public function load_scripts() {
23
  $nonce = wp_create_nonce( 'dokan_pageview' );
24
 
25
+ echo '<script type="text/javascript">
26
+ jQuery(document).ready( function($) {
27
+ var data = {
28
+ action: "dokan_pageview",
29
+ _ajax_nonce: "'. $nonce .'",
30
+ post_id: ' . get_the_ID() . ',
31
+ }
32
+ $.post( "' . admin_url( 'admin-ajax.php' ) . '", data );
33
+ } );
34
+ </script>';
35
  }
36
 
37
+ public function load_views() {
 
38
  if ( is_singular( 'product' ) ) {
39
  global $post;
40
 
41
  if ( empty( $_COOKIE['dokan_product_viewed'] ) ) {
42
  $dokan_viewed_products = array();
43
+ } else {
 
44
  $dokan_viewed_products = (array) explode( ',', $_COOKIE['dokan_product_viewed'] );
45
  }
46
 
48
  $dokan_viewed_products[] = $post->ID;
49
 
50
  wp_enqueue_script( 'jquery' );
 
51
  add_action( 'wp_footer', array($this, 'load_scripts') );
52
  }
 
53
  // Store for single product view
54
  setcookie( 'dokan_product_viewed', implode( ',', $dokan_viewed_products ) );
55
  }
56
  }
57
 
58
+ public function update_view( $post_id = '' ) {
59
+ if ( ! empty( $post_id ) ) {
 
 
60
  $old_views = get_post_meta( $post_id, $this->meta_key, true );
61
  $new_views = absint( $old_views ) + 1;
62
 
64
  }
65
  }
66
 
67
+ public function update_ajax() {
 
68
  check_ajax_referer( 'dokan_pageview' );
69
 
70
  if ( isset( $_POST['post_id'] ) ) {
71
  $post_id = absint( $_POST['post_id'] );
72
  }
73
 
74
+ if ( ! empty( $post_id ) ) {
75
  $this->update_view( $post_id );
76
  }
77
 
78
+ wp_die();
79
+ }
80
+
81
+ /**
82
+ * Vendor regsitration form shortcode callback
83
+ *
84
+ * @return html
85
+ */
86
+ public function vendor_registration_shortcode() {
87
+ if ( is_user_logged_in() ) {
88
+ _e( 'You are already logged in', 'dokan-lite' );
89
+ return;
90
+ }
91
+
92
+ $postdata = wc_clean( $_POST ); // WPCS: CSRF ok, input var ok.
93
+ $role = isset( $postdata['role'] ) ? $postdata['role'] : 'customer';
94
+ ob_start();
95
+
96
+ $notices = wc_get_notices();
97
+
98
+ if ( count( $notices ) > 0 ) {
99
+ wc_print_notices( $notices );
100
+ }
101
+ ?>
102
+
103
+ <form id="register" method="post" class="register">
104
+ <?php do_action( 'woocommerce_register_form_start' ); ?>
105
+
106
+ <?php if ( 'no' === get_option( 'woocommerce_registration_generate_username' ) ) : ?>
107
+ <p class="form-row form-group form-row-wide">
108
+ <label for="reg_username"><?php _e( 'Username', 'dokan-lite' ); ?> <span class="required">*</span></label>
109
+ <input type="text" class="input-text form-control" name="username" id="reg_username" value="<?php if ( ! empty( $_POST['username'] ) ) esc_attr( $_POST['username'] ); ?>" required="required" />
110
+ </p>
111
+ <?php endif; ?>
112
+
113
+ <p class="form-row form-group form-row-wide">
114
+ <label for="reg_email"><?php _e( 'Email address', 'dokan-lite' ); ?> <span class="required">*</span></label>
115
+ <input type="email" class="input-text form-control" name="email" id="reg_email" value="<?php if ( ! empty( $_POST['email'] ) ) esc_attr($_POST['email']); ?>" required="required" />
116
+ <label generated="true" class="reg_email_error"></label>
117
+ </p>
118
+
119
+ <?php if ( 'no' === get_option( 'woocommerce_registration_generate_password' ) ) : ?>
120
+ <p class="form-row form-group form-row-wide">
121
+ <label for="reg_password"><?php _e( 'Password', 'dokan-lite' ); ?> <span class="required">*</span></label>
122
+ <input type="password" class="input-text form-control" name="password" id="reg_password" value="<?php if ( ! empty( $_POST['password'] ) ) esc_attr( $_POST['password'] ); ?>" required="required" minlength="6" />
123
+ </p>
124
+ <?php endif; ?>
125
+ <!-- Spam Trap -->
126
+ <div style="left:-999em; position:absolute;"><label for="trap"><?php _e( 'Anti-spam', 'dokan-lite' ); ?></label><input type="text" name="email_2" id="trap" tabindex="-1" /></div>
127
+
128
+ <div class="split-row form-row-wide">
129
+ <p class="form-row form-group">
130
+ <label for="first-name"><?php _e( 'First Name', 'dokan-lite' ); ?> <span class="required">*</span></label>
131
+ <input type="text" class="input-text form-control" name="fname" id="first-name" value="<?php if ( ! empty( $postdata['fname'] ) ) echo esc_attr($postdata['fname']); ?>" required="required" />
132
+ </p>
133
+
134
+ <p class="form-row form-group">
135
+ <label for="last-name"><?php _e( 'Last Name', 'dokan-lite' ); ?> <span class="required">*</span></label>
136
+ <input type="text" class="input-text form-control" name="lname" id="last-name" value="<?php if ( ! empty( $postdata['lname'] ) ) echo esc_attr($postdata['lname']); ?>" required="required" />
137
+ </p>
138
+ </div>
139
+
140
+ <p class="form-row form-group form-row-wide">
141
+ <label for="company-name"><?php _e( 'Shop Name', 'dokan-lite' ); ?> <span class="required">*</span></label>
142
+ <input type="text" class="input-text form-control" name="shopname" id="company-name" value="<?php if ( ! empty( $postdata['shopname'] ) ) echo esc_attr($postdata['shopname']); ?>" required="required" />
143
+ </p>
144
+
145
+ <p class="form-row form-group form-row-wide">
146
+ <label for="seller-url" class="pull-left"><?php _e( 'Shop URL', 'dokan-lite' ); ?> <span class="required">*</span></label>
147
+ <strong id="url-alart-mgs" class="pull-right"></strong>
148
+ <input type="text" class="input-text form-control" name="shopurl" id="seller-url" value="<?php if ( ! empty( $postdata['shopurl'] ) ) echo esc_attr($postdata['shopurl']); ?>" required="required" />
149
+ <small><?php echo home_url() . '/' . dokan_get_option( 'custom_store_url', 'dokan_general', 'store' ); ?>/<strong id="url-alart"></strong></small>
150
+ </p>
151
+
152
+ <p class="form-row form-group form-row-wide">
153
+ <label for="shop-phone"><?php _e( 'Phone Number', 'dokan-lite' ); ?><span class="required">*</span></label>
154
+ <input type="text" class="input-text form-control" name="phone" id="shop-phone" value="<?php if ( ! empty( $postdata['phone'] ) ) echo esc_attr($postdata['phone']); ?>" required="required" />
155
+ <input type="hidden" name="role" value="<?php echo esc_attr('seller') ?>">
156
+ </p>
157
+
158
+ <?php
159
+ $show_toc = dokan_get_option( 'enable_tc_on_reg', 'dokan_general' );
160
+
161
+ if ( $show_toc == 'on' ) {
162
+ $toc_page_id = dokan_get_option( 'reg_tc_page', 'dokan_pages' );
163
+ if ( $toc_page_id != -1 ) {
164
+ $toc_page_url = get_permalink( $toc_page_id ); ?>
165
+ <p class="form-row form-group form-row-wide">
166
+ <input class="tc_check_box" type="checkbox" id="tc_agree" name="tc_agree" required="required">
167
+ <label style="display: inline" for="tc_agree"><?php echo sprintf( __( 'I have read and agree to the <a target="_blank" href="%s">Terms &amp; Conditions</a>.', 'dokan-lite' ), $toc_page_url ); ?></label>
168
+ </p>
169
+ <?php } ?>
170
+ <?php } ?>
171
+ <?php do_action( 'dokan_seller_registration_field_after' ); ?>
172
+
173
+ <?php do_action( 'register_form' ); ?>
174
+ <p class="form-row">
175
+ <?php wp_nonce_field( 'woocommerce-register', '_wpnonce' ); ?>
176
+ <input type="submit" class="dokan-btn dokan-btn-theme" name="register" value="<?php _e( 'Register', 'dokan-lite' ); ?>" />
177
+ </p>
178
+ <?php do_action( 'woocommerce_register_form_end' ); ?>
179
+ </form>
180
+ <?php
181
+ wp_enqueue_script( 'wc-password-strength-meter' );
182
+ ?>
183
+ <script>
184
+ // Dokan Register
185
+ jQuery(function($) {
186
+ $('#reg_email').on('change', function() {
187
+ var self = $(this);
188
+ var re = /[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,4}/igm;
189
+ if ( $('#reg_email').val() == '' || !re.test( $('#reg_email').val() ) ) {
190
+ $('.reg_email_error').text('Please enter a valid email address.').show();
191
+ } else {
192
+ $('.reg_email_error').hide();
193
+ }
194
+ });
195
+ $('.user-role input[type=radio]').on('change', function() {
196
+ var value = $(this).val();
197
+ if ( value === 'seller') {
198
+ $('.show_if_seller').slideDown();
199
+ if ( $( '.tc_check_box' ).length > 0 )
200
+ $('input[name=register]').attr('disabled','disabled');
201
+ } else {
202
+ $('.show_if_seller').slideUp();
203
+ if ( $( '.tc_check_box' ).length > 0 )
204
+ $( 'input[name=register]' ).removeAttr( 'disabled' );
205
+ }
206
+ });
207
+ $( '.tc_check_box' ).on( 'click', function () {
208
+ var chk_value = $( this ).val();
209
+ if ( $( this ).prop( "checked" ) ) {
210
+ $( 'input[name=register]' ).removeAttr( 'disabled' );
211
+ $( 'input[name=dokan_migration]' ).removeAttr( 'disabled' );
212
+ } else {
213
+ $( 'input[name=register]' ).attr( 'disabled', 'disabled' );
214
+ $( 'input[name=dokan_migration]' ).attr( 'disabled', 'disabled' );
215
+ }
216
+ } );
217
+ if ( $( '.tc_check_box' ).length > 0 ){
218
+ $( 'input[name=dokan_migration]' ).attr( 'disabled', 'disabled' );
219
+ }
220
+ $('#company-name').on('focusout', function() {
221
+ var value = $(this).val().toLowerCase().replace(/-+/g, '').replace(/\s+/g, '-').replace(/[^a-z0-9-]/g, '');
222
+ $('#seller-url').val(value);
223
+ $('#url-alart').text( value );
224
+ $('#seller-url').focus();
225
+ });
226
+ $('#seller-url').keydown(function(e) {
227
+ var text = $(this).val();
228
+ // Allow: backspace, delete, tab, escape, enter and .
229
+ if ($.inArray(e.keyCode, [46, 8, 9, 27, 13, 91, 109, 110, 173, 189, 190]) !== -1 ||
230
+ // Allow: Ctrl+A
231
+ (e.keyCode == 65 && e.ctrlKey === true) ||
232
+ // Allow: home, end, left, right
233
+ (e.keyCode >= 35 && e.keyCode <= 39)) {
234
+ // let it happen, don't do anything
235
+ return;
236
+ }
237
+ if ((e.shiftKey || (e.keyCode < 65 || e.keyCode > 90) && (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105) ) {
238
+ e.preventDefault();
239
+ }
240
+ });
241
+ $('#seller-url').keyup(function(e) {
242
+ $('#url-alart').text( $(this).val() );
243
+ });
244
+ $('#shop-phone').keydown(function(e) {
245
+ // Allow: backspace, delete, tab, escape, enter and .
246
+ if ($.inArray(e.keyCode, [46, 8, 9, 27, 13, 91, 107, 109, 110, 187, 189, 190]) !== -1 ||
247
+ // Allow: Ctrl+A
248
+ (e.keyCode == 65 && e.ctrlKey === true) ||
249
+ // Allow: home, end, left, right
250
+ (e.keyCode >= 35 && e.keyCode <= 39)) {
251
+ // let it happen, don't do anything
252
+ return;
253
+ }
254
+ // Ensure that it is a number and stop the keypress
255
+ if ((e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105)) {
256
+ e.preventDefault();
257
+ }
258
+ });
259
+ $('#seller-url').on('focusout', function() {
260
+ var self = $(this),
261
+ data = {
262
+ action : 'shop_url',
263
+ url_slug : self.val(),
264
+ _nonce : dokan.nonce,
265
+ };
266
+ if ( self.val() === '' ) {
267
+ return;
268
+ }
269
+ var row = self.closest('.form-row');
270
+ row.block({ message: null, overlayCSS: { background: '#fff url(' + dokan.ajax_loader + ') no-repeat center', opacity: 0.6 } });
271
+ $.post( dokan.ajaxurl, data, function(resp) {
272
+ if ( resp == 0){
273
+ $('#url-alart').removeClass('text-success').addClass('text-danger');
274
+ $('#url-alart-mgs').removeClass('text-success').addClass('text-danger').text(dokan.seller.notAvailable);
275
+ } else {
276
+ $('#url-alart').removeClass('text-danger').addClass('text-success');
277
+ $('#url-alart-mgs').removeClass('text-danger').addClass('text-success').text(dokan.seller.available);
278
+ }
279
+ row.unblock();
280
+ } );
281
+ });
282
+ });
283
+ </script>
284
+ <?php return ob_get_clean();
285
  }
286
  }
classes/rewrites.php CHANGED
@@ -19,7 +19,7 @@ class Dokan_Rewrites {
19
  add_action( 'init', array( $this, 'register_rule' ) );
20
 
21
  add_filter( 'template_include', array( $this, 'store_template' ) );
22
- add_filter( 'template_include', array( $this, 'product_edit_template' ) );
23
  add_filter( 'template_include', array( $this, 'store_toc_template' ) );
24
 
25
  add_filter( 'query_vars', array( $this, 'register_query_var' ) );
@@ -165,6 +165,11 @@ class Dokan_Rewrites {
165
  if ( !empty( $store_name ) ) {
166
  $store_user = get_user_by( 'slug', $store_name );
167
 
 
 
 
 
 
168
  // no user found
169
  if ( ! $store_user ) {
170
  return get_404_template();
@@ -215,6 +220,10 @@ class Dokan_Rewrites {
215
  return $template;
216
  }
217
 
 
 
 
 
218
  if ( ! ( get_query_var( 'edit' ) && is_singular( 'product' ) ) ) {
219
  return $template;
220
  }
@@ -222,7 +231,6 @@ class Dokan_Rewrites {
222
  $edit_product_url = dokan_locate_template( 'products/new-product-single.php' );
223
 
224
  return apply_filters( 'dokan_get_product_edit_template', $edit_product_url );
225
- // return apply_filters( 'dokan_get_product_edit_template', $edit_product_url );
226
  }
227
 
228
  /**
19
  add_action( 'init', array( $this, 'register_rule' ) );
20
 
21
  add_filter( 'template_include', array( $this, 'store_template' ) );
22
+ add_filter( 'template_include', array( $this, 'product_edit_template' ), 99 );
23
  add_filter( 'template_include', array( $this, 'store_toc_template' ) );
24
 
25
  add_filter( 'query_vars', array( $this, 'register_query_var' ) );
165
  if ( !empty( $store_name ) ) {
166
  $store_user = get_user_by( 'slug', $store_name );
167
 
168
+ // Bell out for Vendor Stuff extensions
169
+ if ( user_can( $store_user->ID, 'vendor_staff' ) ) {
170
+ return get_404_template();
171
+ }
172
+
173
  // no user found
174
  if ( ! $store_user ) {
175
  return get_404_template();
220
  return $template;
221
  }
222
 
223
+ if ( ! current_user_can( 'dokan_edit_product' ) ) {
224
+ return $template;
225
+ }
226
+
227
  if ( ! ( get_query_var( 'edit' ) && is_singular( 'product' ) ) ) {
228
  return $template;
229
  }
231
  $edit_product_url = dokan_locate_template( 'products/new-product-single.php' );
232
 
233
  return apply_filters( 'dokan_get_product_edit_template', $edit_product_url );
 
234
  }
235
 
236
  /**
classes/seller-setup-wizard.php CHANGED
@@ -55,7 +55,7 @@ class Dokan_Seller_Setup_Wizard extends Dokan_Setup_Wizard {
55
  $this->custom_logo = $setup_wizard_logo_url;
56
  }
57
 
58
- $this->store_id = get_current_user_id();
59
  $this->store_info = dokan_get_store_info( $this->store_id );
60
 
61
  $steps = array(
@@ -87,7 +87,7 @@ class Dokan_Seller_Setup_Wizard extends Dokan_Setup_Wizard {
87
 
88
  $this->enqueue_scripts();
89
 
90
- if ( ! empty( $_POST['save_step'] ) && isset( $this->steps[ $this->step ]['handler'] ) ) {
91
  call_user_func( $this->steps[ $this->step ]['handler'] );
92
  }
93
 
@@ -112,6 +112,7 @@ class Dokan_Seller_Setup_Wizard extends Dokan_Setup_Wizard {
112
  <title><?php _e( 'Vendor &rsaquo; Setup Wizard', 'dokan-lite' ); ?></title>
113
  <?php wp_print_scripts( 'wc-setup' ); ?>
114
  <?php do_action( 'admin_print_styles' ); ?>
 
115
  <style type="text/css">
116
  .wc-setup-steps {
117
  justify-content: center;
@@ -213,8 +214,8 @@ class Dokan_Seller_Setup_Wizard extends Dokan_Setup_Wizard {
213
  <p><?php _e( 'Thank you for choosing The Marketplace to power your online store! This quick setup wizard will help you configure the basic settings. <strong>It’s completely optional and shouldn’t take longer than two minutes.</strong>', 'dokan-lite' ); ?></p>
214
  <p><?php _e( 'No time right now? If you don’t want to go through the wizard, you can skip and return to the Store!', 'dokan-lite' ); ?></p>
215
  <p class="wc-setup-actions step">
216
- <a href="<?php echo esc_url( $this->get_next_step_link() ); ?>" class="button-primary button button-large button-next"><?php _e( 'Let\'s Go!', 'dokan-lite' ); ?></a>
217
- <a href="<?php echo esc_url( $dashboard_url ); ?>" class="button button-large"><?php _e( 'Not right now', 'dokan-lite' ); ?></a>
218
  </p>
219
  <?php
220
  do_action( 'dokan_seller_wizard_introduction', $this );
@@ -295,8 +296,8 @@ class Dokan_Seller_Setup_Wizard extends Dokan_Setup_Wizard {
295
 
296
  </table>
297
  <p class="wc-setup-actions step">
298
- <input type="submit" class="button-primary button button-large button-next" value="<?php esc_attr_e( 'Continue', 'dokan-lite' ); ?>" name="save_step" />
299
- <a href="<?php echo esc_url( $this->get_next_step_link() ); ?>" class="button button-large button-next"><?php _e( 'Skip this step', 'dokan-lite' ); ?></a>
300
  <?php wp_nonce_field( 'dokan-seller-setup' ); ?>
301
  </p>
302
  </form>
@@ -434,15 +435,14 @@ class Dokan_Seller_Setup_Wizard extends Dokan_Setup_Wizard {
434
  ?>
435
  </table>
436
  <p class="wc-setup-actions step">
437
- <input type="submit" class="button-primary button button-large button-next" value="<?php esc_attr_e( 'Continue', 'dokan-lite' ); ?>" name="save_step" />
438
- <a href="<?php echo esc_url( $this->get_next_step_link() ); ?>" class="button button-large button-next"><?php _e( 'Skip this step', 'dokan-lite' ); ?></a>
439
  <?php wp_nonce_field( 'dokan-seller-setup' ); ?>
440
  </p>
441
  </form>
442
  <?php
443
 
444
  do_action( 'dokan_seller_wizard_after_payment_setup_form', $this );
445
-
446
  }
447
 
448
  /**
@@ -501,7 +501,7 @@ class Dokan_Seller_Setup_Wizard extends Dokan_Setup_Wizard {
501
  <div class="wc-setup-next-steps">
502
  <div class="wc-setup-next-steps-first final-button">
503
  <ul>
504
- <li class="setup-product"><a class="button button-primary button-large" href="<?php echo esc_url( $dashboard_url ); ?>"><?php _e( 'Go to your Store Dashboard!', 'dokan-lite' ); ?></a></li>
505
  </ul>
506
  </div>
507
  </div>
@@ -510,4 +510,3 @@ class Dokan_Seller_Setup_Wizard extends Dokan_Setup_Wizard {
510
  }
511
  }
512
 
513
- new Dokan_Seller_Setup_Wizard();
55
  $this->custom_logo = $setup_wizard_logo_url;
56
  }
57
 
58
+ $this->store_id = dokan_get_current_user_id();
59
  $this->store_info = dokan_get_store_info( $this->store_id );
60
 
61
  $steps = array(
87
 
88
  $this->enqueue_scripts();
89
 
90
+ if ( ! empty( $_POST['save_step'] ) && isset( $this->steps[ $this->step ]['handler'] ) ) { // WPCS: CSRF ok.
91
  call_user_func( $this->steps[ $this->step ]['handler'] );
92
  }
93
 
112
  <title><?php _e( 'Vendor &rsaquo; Setup Wizard', 'dokan-lite' ); ?></title>
113
  <?php wp_print_scripts( 'wc-setup' ); ?>
114
  <?php do_action( 'admin_print_styles' ); ?>
115
+ <?php do_action( 'dokan_setup_wizard_styles' ); ?>
116
  <style type="text/css">
117
  .wc-setup-steps {
118
  justify-content: center;
214
  <p><?php _e( 'Thank you for choosing The Marketplace to power your online store! This quick setup wizard will help you configure the basic settings. <strong>It’s completely optional and shouldn’t take longer than two minutes.</strong>', 'dokan-lite' ); ?></p>
215
  <p><?php _e( 'No time right now? If you don’t want to go through the wizard, you can skip and return to the Store!', 'dokan-lite' ); ?></p>
216
  <p class="wc-setup-actions step">
217
+ <a href="<?php echo esc_url( $this->get_next_step_link() ); ?>" class="button-primary button button-large button-next lets-go-btn"><?php _e( 'Let\'s Go!', 'dokan-lite' ); ?></a>
218
+ <a href="<?php echo esc_url( $dashboard_url ); ?>" class="button button-large not-right-now-btn"><?php _e( 'Not right now', 'dokan-lite' ); ?></a>
219
  </p>
220
  <?php
221
  do_action( 'dokan_seller_wizard_introduction', $this );
296
 
297
  </table>
298
  <p class="wc-setup-actions step">
299
+ <input type="submit" class="button-primary button button-large button-next store-step-continue" value="<?php esc_attr_e( 'Continue', 'dokan-lite' ); ?>" name="save_step" />
300
+ <a href="<?php echo esc_url( $this->get_next_step_link() ); ?>" class="button button-large button-next store-step-skip-btn"><?php _e( 'Skip this step', 'dokan-lite' ); ?></a>
301
  <?php wp_nonce_field( 'dokan-seller-setup' ); ?>
302
  </p>
303
  </form>
435
  ?>
436
  </table>
437
  <p class="wc-setup-actions step">
438
+ <input type="submit" class="button-primary button button-large button-next payment-continue-btn" value="<?php esc_attr_e( 'Continue', 'dokan-lite' ); ?>" name="save_step" />
439
+ <a href="<?php echo esc_url( $this->get_next_step_link() ); ?>" class="button button-large button-next payment-step-skip-btn"><?php _e( 'Skip this step', 'dokan-lite' ); ?></a>
440
  <?php wp_nonce_field( 'dokan-seller-setup' ); ?>
441
  </p>
442
  </form>
443
  <?php
444
 
445
  do_action( 'dokan_seller_wizard_after_payment_setup_form', $this );
 
446
  }
447
 
448
  /**
501
  <div class="wc-setup-next-steps">
502
  <div class="wc-setup-next-steps-first final-button">
503
  <ul>
504
+ <li class="setup-product"><a class="button button-primary button-large go-to-dashboard-btn" href="<?php echo esc_url( $dashboard_url ); ?>"><?php _e( 'Go to your Store Dashboard!', 'dokan-lite' ); ?></a></li>
505
  </ul>
506
  </div>
507
  </div>
510
  }
511
  }
512
 
 
classes/template-dashboard.php CHANGED
@@ -21,8 +21,7 @@ class Dokan_Template_Dashboard {
21
  * @since 2.4
22
  */
23
  function __construct() {
24
-
25
- $this->user_id = get_current_user_id();
26
  $this->orders_count = $this->get_orders_count();
27
  $this->post_counts = $this->get_post_counts();
28
  $this->comment_counts = $this->get_comment_counts();
@@ -76,6 +75,9 @@ class Dokan_Template_Dashboard {
76
  * @return void
77
  */
78
  public function get_big_counter_widgets() {
 
 
 
79
 
80
  dokan_get_template_part( 'dashboard/big-counter-widget', '', array(
81
  'pageviews' => $this->pageviews,
@@ -94,6 +96,9 @@ class Dokan_Template_Dashboard {
94
  * @return void
95
  */
96
  public function get_orders_widgets() {
 
 
 
97
 
98
  $order_data = array(
99
  array( 'value' => $this->orders_count->{'wc-completed'}, 'color' => '#73a724' ),
@@ -120,6 +125,10 @@ class Dokan_Template_Dashboard {
120
  * @return void
121
  */
122
  public function get_products_widgets() {
 
 
 
 
123
  dokan_get_template_part( 'dashboard/products-widget', '', array(
124
  'post_counts'=> $this->post_counts,
125
  'products_url'=> dokan_get_navigation_url('products'),
@@ -135,6 +144,10 @@ class Dokan_Template_Dashboard {
135
  * @return void
136
  */
137
  public function get_sales_report_chart_widget() {
 
 
 
 
138
  dokan_get_template_part( 'dashboard/sales-chart-widget', '' );
139
  }
140
 
21
  * @since 2.4
22
  */
23
  function __construct() {
24
+ $this->user_id = dokan_get_current_user_id();
 
25
  $this->orders_count = $this->get_orders_count();
26
  $this->post_counts = $this->get_post_counts();
27
  $this->comment_counts = $this->get_comment_counts();
75
  * @return void
76
  */
77
  public function get_big_counter_widgets() {
78
+ if ( ! current_user_can( 'dokan_view_sales_overview' ) ) {
79
+ return;
80
+ }
81
 
82
  dokan_get_template_part( 'dashboard/big-counter-widget', '', array(
83
  'pageviews' => $this->pageviews,
96
  * @return void
97
  */
98
  public function get_orders_widgets() {
99
+ if ( ! current_user_can( 'dokan_view_order_report' ) ) {
100
+ return;
101
+ }
102
 
103
  $order_data = array(
104
  array( 'value' => $this->orders_count->{'wc-completed'}, 'color' => '#73a724' ),
125
  * @return void
126
  */
127
  public function get_products_widgets() {
128
+ if ( ! current_user_can( 'dokan_view_product_status_report' ) ) {
129
+ return;
130
+ }
131
+
132
  dokan_get_template_part( 'dashboard/products-widget', '', array(
133
  'post_counts'=> $this->post_counts,
134
  'products_url'=> dokan_get_navigation_url('products'),
144
  * @return void
145
  */
146
  public function get_sales_report_chart_widget() {
147
+ if ( ! current_user_can( 'dokan_view_sales_report_chart' ) ) {
148
+ return;
149
+ }
150
+
151
  dokan_get_template_part( 'dashboard/sales-chart-widget', '' );
152
  }
153
 
classes/template-orders.php CHANGED
@@ -73,7 +73,13 @@ class Dokan_Template_Orders {
73
  $order_id = isset( $_GET['order_id'] ) ? intval( $_GET['order_id'] ) : 0;
74
 
75
  if ( $order_id ) {
76
- dokan_get_template_part( 'orders/details' );
 
 
 
 
 
 
77
  } else {
78
  dokan_get_template_part( 'orders/date-export');
79
  dokan_get_template_part( 'orders/listing' );
@@ -96,6 +102,10 @@ class Dokan_Template_Orders {
96
  return;
97
  }
98
 
 
 
 
 
99
  if ( isset( $_POST['dokan_order_export_all'] ) ) {
100
 
101
  $filename = "Orders-".time();
@@ -122,7 +132,7 @@ class Dokan_Template_Orders {
122
  }
123
 
124
  echo "\r\n";
125
- $user_orders = dokan_get_seller_orders( get_current_user_id(), 'all', NULL, 10000000, 0 );
126
  $statuses = wc_get_order_statuses();
127
  $results = array();
128
  foreach ( $user_orders as $order ) {
@@ -193,7 +203,7 @@ class Dokan_Template_Orders {
193
 
194
  $order_date = ( isset( $_POST['order_date'] ) ) ? $_POST['order_date'] : NULL;
195
  $order_status = ( isset( $_POST['order_status'] ) ) ? $_POST['order_status'] : 'all';
196
- $user_orders = dokan_get_seller_orders( get_current_user_id(), $order_status, $order_date, 10000000, 0 );
197
  $statuses = wc_get_order_statuses();
198
  $results = array();
199
 
73
  $order_id = isset( $_GET['order_id'] ) ? intval( $_GET['order_id'] ) : 0;
74
 
75
  if ( $order_id ) {
76
+
77
+ if ( wp_verify_nonce( $_REQUEST['_wpnonce'], 'dokan_view_order' ) && current_user_can( 'dokan_view_order' ) ) {
78
+ dokan_get_template_part( 'orders/details' );
79
+ } else {
80
+ dokan_get_template_part( 'global/dokan-error', '', array( 'deleted' => false, 'message' => __( 'You have no permission to view this order', 'dokan-lite' ) ) );
81
+ }
82
+
83
  } else {
84
  dokan_get_template_part( 'orders/date-export');
85
  dokan_get_template_part( 'orders/listing' );
102
  return;
103
  }
104
 
105
+ if ( isset( $_POST['dokan_vendor_order_export_nonce'] ) && ! wp_verify_nonce( $_POST['dokan_vendor_order_export_nonce'], 'dokan_vendor_order_export_action' ) ) {
106
+ return;
107
+ }
108
+
109
  if ( isset( $_POST['dokan_order_export_all'] ) ) {
110
 
111
  $filename = "Orders-".time();
132
  }
133
 
134
  echo "\r\n";
135
+ $user_orders = dokan_get_seller_orders( dokan_get_current_user_id(), 'all', NULL, 10000000, 0 );
136
  $statuses = wc_get_order_statuses();
137
  $results = array();
138
  foreach ( $user_orders as $order ) {
203
 
204
  $order_date = ( isset( $_POST['order_date'] ) ) ? $_POST['order_date'] : NULL;
205
  $order_status = ( isset( $_POST['order_status'] ) ) ? $_POST['order_status'] : 'all';
206
+ $user_orders = dokan_get_seller_orders( dokan_get_current_user_id(), $order_status, $order_date, 10000000, 0 );
207
  $statuses = wc_get_order_statuses();
208
  $results = array();
209
 
classes/template-products.php CHANGED
@@ -68,8 +68,11 @@ class Dokan_Template_Products {
68
  * @return void
69
  */
70
  public function load_product_edit_template() {
71
- if ( !WeDevs_Dokan::init()->is_pro_exists() ) {
72
  dokan_get_template_part( 'products/new-product-single' );
 
 
 
73
  }
74
  }
75
 
@@ -106,10 +109,6 @@ class Dokan_Template_Products {
106
  self::$product_cat = -1;
107
  self::$post_content = __( 'Details of your product ...', 'dokan-lite' );
108
 
109
- if ( ! $_POST ) {
110
- return;
111
- }
112
-
113
  if ( isset( $_POST['add_product'] ) && wp_verify_nonce( $_POST['dokan_add_new_product_nonce'], 'dokan_add_new_product' ) ) {
114
  $post_title = trim( $_POST['post_title'] );
115
  $post_content = trim( $_POST['post_content'] );
@@ -222,13 +221,17 @@ class Dokan_Template_Products {
222
 
223
  do_action( 'dokan_new_product_added', $product_id, $post_data );
224
 
225
- $redirect = apply_filters( 'dokan_add_new_product_redirect', dokan_edit_product_url( $product_id ), $product_id );
 
 
 
 
226
 
227
  if ( 'create_and_add_new' === $_POST['add_product'] ) {
228
  $redirect = add_query_arg( array( 'created_product' => $product_id ), dokan_get_navigation_url( 'new-product' ) );
229
  }
230
 
231
- wp_redirect( $redirect );
232
  exit;
233
  }
234
  }
@@ -337,6 +340,10 @@ class Dokan_Template_Products {
337
  return;
338
  }
339
 
 
 
 
 
340
  dokan_delete_product_handler();
341
  }
342
 
68
  * @return void
69
  */
70
  public function load_product_edit_template() {
71
+ if ( current_user_can( 'dokan_edit_product' ) ) {
72
  dokan_get_template_part( 'products/new-product-single' );
73
+ } else {
74
+ dokan_get_template_part('global/dokan-error', '', array( 'deleted' => false, 'message' => __( 'You have no permission to view this page', 'dokan-lite' ) ) );
75
+ return;
76
  }
77
  }
78
 
109
  self::$product_cat = -1;
110
  self::$post_content = __( 'Details of your product ...', 'dokan-lite' );
111
 
 
 
 
 
112
  if ( isset( $_POST['add_product'] ) && wp_verify_nonce( $_POST['dokan_add_new_product_nonce'], 'dokan_add_new_product' ) ) {
113
  $post_title = trim( $_POST['post_title'] );
114
  $post_content = trim( $_POST['post_content'] );
221
 
222
  do_action( 'dokan_new_product_added', $product_id, $post_data );
223
 
224
+ if ( current_user_can( 'dokan_edit_product' ) ) {
225
+ $redirect = dokan_edit_product_url( $product_id );
226
+ } else {
227
+ $redirect = dokan_get_navigation_url( 'products' );
228
+ }
229
 
230
  if ( 'create_and_add_new' === $_POST['add_product'] ) {
231
  $redirect = add_query_arg( array( 'created_product' => $product_id ), dokan_get_navigation_url( 'new-product' ) );
232
  }
233
 
234
+ wp_redirect( apply_filters( 'dokan_add_new_product_redirect', $redirect, $product_id ) );
235
  exit;
236
  }
237
  }
340
  return;
341
  }
342
 
343
+ if ( ! current_user_can( 'dokan_delete_product' ) ) {
344
+ return;
345
+ }
346
+
347
  dokan_delete_product_handler();
348
  }
349
 
classes/template-settings.php CHANGED
@@ -35,7 +35,7 @@ class Dokan_Template_Settings {
35
  public static function init() {
36
  static $instance = false;
37
 
38
- if ( !$instance ) {
39
  $instance = new Dokan_Template_Settings();
40
  }
41
 
@@ -145,11 +145,19 @@ class Dokan_Template_Settings {
145
  global $wp;
146
 
147
  if ( isset( $wp->query_vars['settings'] ) && $wp->query_vars['settings'] == 'store' ) {
148
- $this->load_store_content();
 
 
 
 
149
  }
150
 
151
  if ( isset( $wp->query_vars['settings'] ) && $wp->query_vars['settings'] == 'payment' ) {
152
- $this->load_payment_content();
 
 
 
 
153
  }
154
 
155
  do_action( 'dokan_render_settings_content', $wp->query_vars );
@@ -164,8 +172,8 @@ class Dokan_Template_Settings {
164
  */
165
  public function load_store_content() {
166
  $validate = $this->validate();
167
- $currentuser = get_current_user_id();
168
- $profile_info = dokan_get_store_info( get_current_user_id() );
169
 
170
  dokan_get_template_part( 'settings/store-form', '', array(
171
  'current_user' => $currentuser,
@@ -184,8 +192,8 @@ class Dokan_Template_Settings {
184
  */
185
  public function load_payment_content() {
186
  $methods = dokan_withdraw_get_active_methods();
187
- $currentuser = get_current_user_id();
188
- $profile_info = dokan_get_store_info( get_current_user_id() );
189
 
190
  dokan_get_template_part( 'settings/payment', '', array(
191
  'methods' => $methods,
@@ -209,21 +217,31 @@ class Dokan_Template_Settings {
209
 
210
  $_POST['dokan_update_profile'] = '';
211
 
212
- switch( $_POST['form_id'] ) {
213
  case 'profile-form':
 
 
 
214
  if ( !wp_verify_nonce( $_POST['_wpnonce'], 'dokan_profile_settings_nonce' ) ) {
215
  wp_send_json_error( __( 'Are you cheating?', 'dokan-lite' ) );
216
  }
217
  $ajax_validate = $this->profile_validate();
218
  break;
219
  case 'store-form':
 
 
 
220
  if ( !wp_verify_nonce( $_POST['_wpnonce'], 'dokan_store_settings_nonce' ) ) {
221
  wp_send_json_error( __( 'Are you cheating?', 'dokan-lite' ) );
222
  }
223
  $ajax_validate = $this->store_validate();
224
  break;
225
  case 'payment-form':
226
- if ( !wp_verify_nonce( $_POST['_wpnonce'], 'dokan_payment_settings_nonce' ) ) {
 
 
 
 
227
  wp_send_json_error( __( 'Are you cheating?', 'dokan-lite' ) );
228
  }
229
  $ajax_validate = $this->payment_validate();
@@ -261,6 +279,7 @@ class Dokan_Template_Settings {
261
  wp_die( __( 'Are you cheating?', 'dokan-lite' ) );
262
  }
263
 
 
264
  $error = new WP_Error();
265
 
266
  $dokan_name = sanitize_text_field( $_POST['dokan_store_name'] );
@@ -434,7 +453,7 @@ class Dokan_Template_Settings {
434
  */
435
  function insert_settings_info() {
436
 
437
- $store_id = get_current_user_id();
438
  $existing_dokan_settings = get_user_meta( $store_id, 'dokan_profile_settings', true );
439
  $prev_dokan_settings = ! empty( $existing_dokan_settings ) ? $existing_dokan_settings : array();
440
 
@@ -471,6 +490,8 @@ class Dokan_Template_Settings {
471
  'store_tnc' => isset( $_POST['dokan_store_tnc'] ) ? $_POST['dokan_store_tnc'] : ''
472
  );
473
 
 
 
474
  } elseif ( wp_verify_nonce( $_POST['_wpnonce'], 'dokan_payment_settings_nonce' ) ) {
475
 
476
  //update payment settings info
@@ -506,13 +527,12 @@ class Dokan_Template_Settings {
506
 
507
  }
508
 
509
- $dokan_settings = array_merge( $prev_dokan_settings,$dokan_settings );
510
 
511
  $profile_completeness = $this->calculate_profile_completeness_value( $dokan_settings );
512
  $dokan_settings['profile_completion'] = $profile_completeness;
513
 
514
  update_user_meta( $store_id, 'dokan_profile_settings', $dokan_settings );
515
- update_user_meta( $store_id, 'dokan_store_name', $dokan_settings['store_name'] );
516
 
517
  do_action( 'dokan_store_profile_saved', $store_id, $dokan_settings );
518
 
@@ -554,7 +574,7 @@ class Dokan_Template_Settings {
554
  );
555
 
556
  // setting values for completion
557
- $progress_values = apply_filters('dokan_profile_completion_values', $progress_values);
558
 
559
  extract( $progress_values );
560
 
@@ -699,7 +719,7 @@ class Dokan_Template_Settings {
699
  $track_val['next_todo'] = $next_add;
700
  $track_val['progress'] = $profile_val;
701
  $track_val['progress_vals'] = $progress_values;
702
-
703
  return apply_filters( 'dokan_profile_completion_progress_value', $track_val ) ;
704
  }
705
 
35
  public static function init() {
36
  static $instance = false;
37
 
38
+ if ( ! $instance ) {
39
  $instance = new Dokan_Template_Settings();
40
  }
41
 
145
  global $wp;
146
 
147
  if ( isset( $wp->query_vars['settings'] ) && $wp->query_vars['settings'] == 'store' ) {
148
+ if ( ! current_user_can( 'dokan_view_store_settings_menu' ) ) {
149
+ dokan_get_template_part('global/dokan-error', '', array( 'deleted' => false, 'message' => __( 'You have no permission to view this page', 'dokan-lite' ) ) );
150
+ } else {
151
+ $this->load_store_content();
152
+ }
153
  }
154
 
155
  if ( isset( $wp->query_vars['settings'] ) && $wp->query_vars['settings'] == 'payment' ) {
156
+ if ( ! current_user_can( 'dokan_view_store_payment_menu' ) ) {
157
+ dokan_get_template_part('global/dokan-error', '', array( 'deleted' => false, 'message' => __( 'You have no permission to view this page', 'dokan-lite' ) ) );
158
+ } else {
159
+ $this->load_payment_content();
160
+ }
161
  }
162
 
163
  do_action( 'dokan_render_settings_content', $wp->query_vars );
172
  */
173
  public function load_store_content() {
174
  $validate = $this->validate();
175
+ $currentuser = dokan_get_current_user_id();
176
+ $profile_info = dokan_get_store_info( dokan_get_current_user_id() );
177
 
178
  dokan_get_template_part( 'settings/store-form', '', array(
179
  'current_user' => $currentuser,
192
  */
193
  public function load_payment_content() {
194
  $methods = dokan_withdraw_get_active_methods();
195
+ $currentuser = dokan_get_current_user_id();
196
+ $profile_info = dokan_get_store_info( dokan_get_current_user_id() );
197
 
198
  dokan_get_template_part( 'settings/payment', '', array(
199
  'methods' => $methods,
217
 
218
  $_POST['dokan_update_profile'] = '';
219
 
220
+ switch( $_POST['form_id'] ) { // WPCS: CSRF ok.
221
  case 'profile-form':
222
+ if ( ! current_user_can( 'dokan_view_store_social_menu' ) ) {
223
+ wp_send_json_error( __( 'Pemission denied social', 'dokan-lite' ) );
224
+ }
225
  if ( !wp_verify_nonce( $_POST['_wpnonce'], 'dokan_profile_settings_nonce' ) ) {
226
  wp_send_json_error( __( 'Are you cheating?', 'dokan-lite' ) );
227
  }
228
  $ajax_validate = $this->profile_validate();
229
  break;
230
  case 'store-form':
231
+ if ( !current_user_can( 'dokan_view_store_settings_menu' ) ) {
232
+ wp_send_json_error( __( 'Pemission denied', 'dokan-lite' ) );
233
+ }
234
  if ( !wp_verify_nonce( $_POST['_wpnonce'], 'dokan_store_settings_nonce' ) ) {
235
  wp_send_json_error( __( 'Are you cheating?', 'dokan-lite' ) );
236
  }
237
  $ajax_validate = $this->store_validate();
238
  break;
239
  case 'payment-form':
240
+ if ( !current_user_can( 'dokan_view_store_payment_menu' ) ) {
241
+ wp_send_json_error( __( 'Pemission denied', 'dokan-lite' ) );
242
+ }
243
+
244
+ if ( ! wp_verify_nonce( $_POST['_wpnonce'], 'dokan_payment_settings_nonce' ) ) {
245
  wp_send_json_error( __( 'Are you cheating?', 'dokan-lite' ) );
246
  }
247
  $ajax_validate = $this->payment_validate();
279
  wp_die( __( 'Are you cheating?', 'dokan-lite' ) );
280
  }
281
 
282
+
283
  $error = new WP_Error();
284
 
285
  $dokan_name = sanitize_text_field( $_POST['dokan_store_name'] );
453
  */
454
  function insert_settings_info() {
455
 
456
+ $store_id = dokan_get_current_user_id();
457
  $existing_dokan_settings = get_user_meta( $store_id, 'dokan_profile_settings', true );
458
  $prev_dokan_settings = ! empty( $existing_dokan_settings ) ? $existing_dokan_settings : array();
459
 
490
  'store_tnc' => isset( $_POST['dokan_store_tnc'] ) ? $_POST['dokan_store_tnc'] : ''
491
  );
492
 
493
+ update_user_meta( $store_id, 'dokan_store_name', $dokan_settings['store_name'] );
494
+
495
  } elseif ( wp_verify_nonce( $_POST['_wpnonce'], 'dokan_payment_settings_nonce' ) ) {
496
 
497
  //update payment settings info
527
 
528
  }
529
 
530
+ $dokan_settings = array_merge( $prev_dokan_settings, $dokan_settings );
531
 
532
  $profile_completeness = $this->calculate_profile_completeness_value( $dokan_settings );
533
  $dokan_settings['profile_completion'] = $profile_completeness;
534
 
535
  update_user_meta( $store_id, 'dokan_profile_settings', $dokan_settings );
 
536
 
537
  do_action( 'dokan_store_profile_saved', $store_id, $dokan_settings );
538
 
574
  );
575
 
576
  // setting values for completion
577
+ $progress_values = apply_filters('dokan_profile_completion_values', $progress_values );
578
 
579
  extract( $progress_values );
580
 
719
  $track_val['next_todo'] = $next_add;
720
  $track_val['progress'] = $profile_val;
721
  $track_val['progress_vals'] = $progress_values;
722
+
723
  return apply_filters( 'dokan_profile_completion_progress_value', $track_val ) ;
724
  }
725
 
classes/template-shortcodes.php CHANGED
@@ -50,25 +50,45 @@ class Dokan_Template_Shortcodes {
50
  return sprintf( __( 'Please install <a href="%s"><strong>WooCommerce</strong></a> plugin first', 'dokan-lite' ), 'http://wordpress.org/plugins/woocommerce/' );
51
  }
52
 
 
 
 
 
53
  ob_start();
54
 
55
  if ( isset( $wp->query_vars['products'] ) ) {
56
- dokan_get_template_part( 'products/products' );
 
 
 
 
57
  return ob_get_clean();
58
  }
59
 
60
  if ( isset( $wp->query_vars['new-product'] ) ) {
61
- do_action( 'dokan_render_new_product_template', $wp->query_vars );
 
 
 
 
62
  return ob_get_clean();
63
  }
64
 
65
  if ( isset( $wp->query_vars['orders'] ) ) {
66
- dokan_get_template_part( 'orders/orders' );
 
 
 
 
67
  return ob_get_clean();
68
  }
69
 
70
  if ( isset( $wp->query_vars['withdraw'] ) ) {
71
- dokan_get_template_part( 'withdraw/withdraw' );
 
 
 
 
72
  return ob_get_clean();
73
  }
74
 
@@ -78,7 +98,11 @@ class Dokan_Template_Shortcodes {
78
  }
79
 
80
  if ( isset( $wp->query_vars['page'] ) ) {
81
- dokan_get_template_part( 'dashboard/dashboard' );
 
 
 
 
82
  return ob_get_clean();
83
  }
84
  if ( isset( $wp->query_vars['edit-account'] ) ) {
@@ -169,6 +193,10 @@ class Dokan_Template_Shortcodes {
169
  * @return string
170
  */
171
  function my_orders_page() {
 
 
 
 
172
  return dokan_get_template_part( 'my-orders' );
173
  }
174
  }
50
  return sprintf( __( 'Please install <a href="%s"><strong>WooCommerce</strong></a> plugin first', 'dokan-lite' ), 'http://wordpress.org/plugins/woocommerce/' );
51
  }
52
 
53
+ if ( ! dokan_is_user_seller( get_current_user_id() ) ) {
54
+ return __( 'You have no permission to view this page', 'dokan-lite' );
55
+ }
56
+
57
  ob_start();
58
 
59
  if ( isset( $wp->query_vars['products'] ) ) {
60
+ if ( ! current_user_can( 'dokan_view_product_menu' ) ) {
61
+ dokan_get_template_part( 'global/no-permission' );
62
+ } else {
63
+ dokan_get_template_part( 'products/products' );
64
+ }
65
  return ob_get_clean();
66
  }
67
 
68
  if ( isset( $wp->query_vars['new-product'] ) ) {
69
+ if ( ! current_user_can( 'dokan_add_product' ) ) {
70
+ dokan_get_template_part( 'global/no-permission' );
71
+ } else {
72
+ do_action( 'dokan_render_new_product_template', $wp->query_vars );
73
+ }
74
  return ob_get_clean();
75
  }
76
 
77
  if ( isset( $wp->query_vars['orders'] ) ) {
78
+ if ( ! current_user_can( 'dokan_view_order_menu' ) ) {
79
+ dokan_get_template_part( 'global/no-permission' );
80
+ } else {
81
+ dokan_get_template_part( 'orders/orders' );
82
+ }
83
  return ob_get_clean();
84
  }
85
 
86
  if ( isset( $wp->query_vars['withdraw'] ) ) {
87
+ if ( ! current_user_can( 'dokan_view_withdraw_menu' ) ) {
88
+ dokan_get_template_part( 'global/no-permission' );
89
+ } else {
90
+ dokan_get_template_part( 'withdraw/withdraw' );
91
+ }
92
  return ob_get_clean();
93
  }
94
 
98
  }
99
 
100
  if ( isset( $wp->query_vars['page'] ) ) {
101
+ if ( ! current_user_can( 'dokan_view_overview_menu' ) ) {
102
+ dokan_get_template_part( 'global/no-permission' );
103
+ } else {
104
+ dokan_get_template_part( 'dashboard/dashboard' );
105
+ }
106
  return ob_get_clean();
107
  }
108
  if ( isset( $wp->query_vars['edit-account'] ) ) {
193
  * @return string
194
  */
195
  function my_orders_page() {
196
+ if ( ! is_user_logged_in() ) {
197
+ return;
198
+ }
199
+
200
  return dokan_get_template_part( 'my-orders' );
201
  }
202
  }
classes/template-withdraw.php CHANGED
@@ -75,6 +75,11 @@ class Dokan_Template_Withdraw extends Dokan_Withdraw {
75
  */
76
  public function withdraw_header_render() {
77
  dokan_get_template_part( 'withdraw/header' );
 
 
 
 
 
78
  }
79
 
80
  /**
@@ -102,6 +107,10 @@ class Dokan_Template_Withdraw extends Dokan_Withdraw {
102
  * @return void
103
  */
104
  public function withdraw_status_filter() {
 
 
 
 
105
  dokan_get_template_part( 'withdraw/status-listing', '', array( 'current' => $this->current_status ) );
106
  }
107
 
@@ -113,7 +122,11 @@ class Dokan_Template_Withdraw extends Dokan_Withdraw {
113
  * @return void
114
  */
115
  public function show_seller_balance() {
116
- $balance = dokan_get_seller_balance( get_current_user_id(), true );
 
 
 
 
117
  $withdraw_limit = dokan_get_option( 'withdraw_limit', 'dokan_withdraw', -1 );
118
  $threshold = dokan_get_option( 'withdraw_date_limit', 'dokan_withdraw', -1 );
119
 
@@ -141,9 +154,9 @@ class Dokan_Template_Withdraw extends Dokan_Withdraw {
141
  if ( $this->current_status == 'pending' ) {
142
  $this->withdraw_form( self::$validate );
143
  } elseif ( $this->current_status == 'approved' ) {
144
- $this->user_approved_withdraws( get_current_user_id() );
145
  } elseif ( $this->current_status == 'cancelled' ) {
146
- $this->user_cancelled_withdraws( get_current_user_id() );
147
  }
148
  }
149
 
@@ -177,6 +190,10 @@ class Dokan_Template_Withdraw extends Dokan_Withdraw {
177
  wp_die( __( 'Are you cheating?', 'dokan-lite' ) );
178
  }
179
 
 
 
 
 
180
  global $current_user, $wpdb;
181
 
182
  $row_id = absint( $_GET['id'] );
@@ -202,9 +219,13 @@ class Dokan_Template_Withdraw extends Dokan_Withdraw {
202
  wp_die( __( 'Are you cheating?', 'dokan-lite' ) );
203
  }
204
 
 
 
 
 
205
  $error = new WP_Error();
206
  $limit = $this->get_withdraw_limit();
207
- $balance = dokan_get_seller_balance( get_current_user_id(), false );
208
  $withdraw_amount = (float) $_POST['witdraw_amount'];
209
 
210
  if ( empty( $_POST['witdraw_amount'] ) ) {
@@ -234,6 +255,14 @@ class Dokan_Template_Withdraw extends Dokan_Withdraw {
234
  */
235
  function insert_withdraw_info() {
236
 
 
 
 
 
 
 
 
 
237
  global $current_user;
238
 
239
  $amount = floatval( $_POST['witdraw_amount'] );
@@ -263,6 +292,10 @@ class Dokan_Template_Withdraw extends Dokan_Withdraw {
263
  * @return void
264
  */
265
  function withdraw_requests( $user_id ) {
 
 
 
 
266
  $withdraw_requests = $this->get_withdraw_requests( $user_id );
267
 
268
  dokan_get_template_part( 'withdraw/pending-request-listing', '', array(
@@ -279,6 +312,8 @@ class Dokan_Template_Withdraw extends Dokan_Withdraw {
279
  $type = isset( $_GET['message'] ) ? $_GET['message'] : '';
280
  $message = '';
281
 
 
 
282
  switch ( $type ) {
283
  case 'request_cancelled':
284
  $message = __( 'Your request has been cancelled successfully!', 'dokan-lite' );
@@ -290,11 +325,12 @@ class Dokan_Template_Withdraw extends Dokan_Withdraw {
290
 
291
  case 'request_error':
292
  $message = __( 'Unknown error!', 'dokan-lite' );
 
293
  break;
294
  }
295
 
296
  if ( ! empty( $message ) ) {
297
- dokan_get_template_part( 'global/dokan-error', '', array( 'deleted' => true, 'message' => $message ) );
298
  }
299
  }
300
 
@@ -308,6 +344,10 @@ class Dokan_Template_Withdraw extends Dokan_Withdraw {
308
  function withdraw_form( $validate = '' ) {
309
  global $current_user;
310
 
 
 
 
 
311
  // show alert messages
312
  $this->show_alert_messages();
313
 
@@ -346,11 +386,11 @@ class Dokan_Template_Withdraw extends Dokan_Withdraw {
346
  return;
347
  }
348
 
349
- $payment_methods = dokan_withdraw_get_active_methods();
350
 
351
  if ( is_wp_error( $validate ) ) {
352
- $amount = $_POST['witdraw_amount'];
353
- $withdraw_method = $_POST['withdraw_method'];
354
  } else {
355
  $amount = '';
356
  $withdraw_method = '';
@@ -371,6 +411,9 @@ class Dokan_Template_Withdraw extends Dokan_Withdraw {
371
  * @return void
372
  */
373
  function user_approved_withdraws( $user_id ) {
 
 
 
374
  $requests = $this->get_withdraw_requests( $user_id, 1, 100 );
375
 
376
  if ( $requests ) {
@@ -397,6 +440,9 @@ class Dokan_Template_Withdraw extends Dokan_Withdraw {
397
  * @return void
398
  */
399
  function user_cancelled_withdraws( $user_id ){
 
 
 
400
 
401
  $requests = $this->get_withdraw_requests( $user_id, 2, 100 );
402
 
75
  */
76
  public function withdraw_header_render() {
77
  dokan_get_template_part( 'withdraw/header' );
78
+
79
+ if ( ! current_user_can( 'dokan_manage_withdraw' ) ) {
80
+ dokan_get_template_part('global/dokan-error', '', array( 'deleted' => false, 'message' => __( 'You have no permission to manage withdraws', 'dokan-lite' ) ) );
81
+ return;
82
+ }
83
  }
84
 
85
  /**
107
  * @return void
108
  */
109
  public function withdraw_status_filter() {
110
+ if ( ! current_user_can( 'dokan_manage_withdraw' ) ) {
111
+ return;
112
+ }
113
+
114
  dokan_get_template_part( 'withdraw/status-listing', '', array( 'current' => $this->current_status ) );
115
  }
116
 
122
  * @return void
123
  */
124
  public function show_seller_balance() {
125
+ if ( ! current_user_can( 'dokan_manage_withdraw' ) ) {
126
+ return;
127
+ }
128
+
129
+ $balance = dokan_get_seller_balance( dokan_get_current_user_id(), true );
130
  $withdraw_limit = dokan_get_option( 'withdraw_limit', 'dokan_withdraw', -1 );
131
  $threshold = dokan_get_option( 'withdraw_date_limit', 'dokan_withdraw', -1 );
132
 
154
  if ( $this->current_status == 'pending' ) {
155
  $this->withdraw_form( self::$validate );
156
  } elseif ( $this->current_status == 'approved' ) {
157
+ $this->user_approved_withdraws( dokan_get_current_user_id() );
158
  } elseif ( $this->current_status == 'cancelled' ) {
159
+ $this->user_cancelled_withdraws( dokan_get_current_user_id() );
160
  }
161
  }
162
 
190
  wp_die( __( 'Are you cheating?', 'dokan-lite' ) );
191
  }
192
 
193
+ if ( ! current_user_can( 'dokan_manage_withdraw' ) ) {
194
+ wp_die( __( 'You have no permission to do this action', 'dokan-lite' ) );
195
+ }
196
+
197
  global $current_user, $wpdb;
198
 
199
  $row_id = absint( $_GET['id'] );
219
  wp_die( __( 'Are you cheating?', 'dokan-lite' ) );
220
  }
221
 
222
+ if ( ! current_user_can( 'dokan_manage_withdraw' ) ) {
223
+ wp_die( __( 'You have no permission to do this action', 'dokan-lite' ) );
224
+ }
225
+
226
  $error = new WP_Error();
227
  $limit = $this->get_withdraw_limit();
228
+ $balance = dokan_get_seller_balance( dokan_get_current_user_id(), false );
229
  $withdraw_amount = (float) $_POST['witdraw_amount'];
230
 
231
  if ( empty( $_POST['witdraw_amount'] ) ) {
255
  */
256
  function insert_withdraw_info() {
257
 
258
+ if ( isset( $_POST['dokan_withdraw_nonce'] ) && ! wp_verify_nonce( $_POST['dokan_withdraw_nonce'], 'dokan_withdraw' ) ) {
259
+ return;
260
+ }
261
+
262
+ if ( ! current_user_can( 'dokan_manage_withdraw' ) ) {
263
+ return;
264
+ }
265
+
266
  global $current_user;
267
 
268
  $amount = floatval( $_POST['witdraw_amount'] );
292
  * @return void
293
  */
294
  function withdraw_requests( $user_id ) {
295
+ if ( ! current_user_can( 'dokan_manage_withdraw' ) ) {
296
+ return;
297
+ }
298
+
299
  $withdraw_requests = $this->get_withdraw_requests( $user_id );
300
 
301
  dokan_get_template_part( 'withdraw/pending-request-listing', '', array(
312
  $type = isset( $_GET['message'] ) ? $_GET['message'] : '';
313
  $message = '';
314
 
315
+ $template = 'global/dokan-success';
316
+
317
  switch ( $type ) {
318
  case 'request_cancelled':
319
  $message = __( 'Your request has been cancelled successfully!', 'dokan-lite' );
325
 
326
  case 'request_error':
327
  $message = __( 'Unknown error!', 'dokan-lite' );
328
+ $template = 'global/dokan-error';
329
  break;
330
  }
331
 
332
  if ( ! empty( $message ) ) {
333
+ dokan_get_template_part( $template, '', array( 'deleted' => true, 'message' => $message ) );
334
  }
335
  }
336
 
344
  function withdraw_form( $validate = '' ) {
345
  global $current_user;
346
 
347
+ if ( ! current_user_can( 'dokan_manage_withdraw' ) ) {
348
+ return;
349
+ }
350
+
351
  // show alert messages
352
  $this->show_alert_messages();
353
 
386
  return;
387
  }
388
 
389
+ $payment_methods = dokan_get_seller_active_withdraw_methods();
390
 
391
  if ( is_wp_error( $validate ) ) {
392
+ $amount = sanitize_text_field( $_POST['witdraw_amount'] );
393
+ $withdraw_method = sanitize_text_field( $_POST['withdraw_method'] );
394
  } else {
395
  $amount = '';
396
  $withdraw_method = '';
411
  * @return void
412
  */
413
  function user_approved_withdraws( $user_id ) {
414
+ if ( ! current_user_can( 'dokan_manage_withdraw' ) ) {
415
+ return;
416
+ }
417
  $requests = $this->get_withdraw_requests( $user_id, 1, 100 );
418
 
419
  if ( $requests ) {
440
  * @return void
441
  */
442
  function user_cancelled_withdraws( $user_id ){
443
+ if ( ! current_user_can( 'dokan_manage_withdraw' ) ) {
444
+ return;
445
+ }
446
 
447
  $requests = $this->get_withdraw_requests( $user_id, 2, 100 );
448
 
classes/upgrade.php CHANGED
@@ -19,6 +19,8 @@ class Dokan_Upgrade {
19
  '2.4.12' => 'upgrades/dokan-upgrade-2.4.12.php',
20
  '2.5.7' => 'upgrades/dokan-upgrade-2.5.7.php',
21
  '2.6.9' => 'upgrades/dokan-upgrade-2.6.9.php',
 
 
22
  ];
23
 
24
  /**
19
  '2.4.12' => 'upgrades/dokan-upgrade-2.4.12.php',
20
  '2.5.7' => 'upgrades/dokan-upgrade-2.5.7.php',
21
  '2.6.9' => 'upgrades/dokan-upgrade-2.6.9.php',
22
+ '2.7.3' => 'upgrades/dokan-upgrade-2.7.3.php',
23
+ '2.7.6' => 'upgrades/dokan-upgrade-2.7.6.php',
24
  ];
25
 
26
  /**
classes/withdraw.php CHANGED
@@ -169,6 +169,11 @@ class Dokan_Withdraw {
169
  * @return void
170
  */
171
  function note_update() {
 
 
 
 
 
172
  global $wpdb;
173
 
174
  $table_name = $wpdb->prefix . 'dokan_withdraw';
169
  * @return void
170
  */
171
  function note_update() {
172
+
173
+ if ( isset( $_POST['dokan_admin_nonce'] ) && !wp_verify_nonce( sanitize_key( $_POST['dokan_admin_nonce'] ), 'dokan_admin_action' ) ) {
174
+ return;
175
+ }
176
+
177
  global $wpdb;
178
 
179
  $table_name = $wpdb->prefix . 'dokan_withdraw';
dokan.php CHANGED
@@ -3,10 +3,12 @@
3
  Plugin Name: Dokan
4
  Plugin URI: https://wordpress.org/plugins/dokan-lite/
5
  Description: An e-commerce marketplace plugin for WordPress. Powered by WooCommerce and weDevs.
6
- Version: 2.6.10
7
  Author: weDevs
8
  Author URI: https://wedevs.com/
9
  Text Domain: dokan-lite
 
 
10
  Domain Path: /languages/
11
  License: GPL2
12
  */
@@ -76,7 +78,7 @@ final class WeDevs_Dokan {
76
  *
77
  * @var string
78
  */
79
- public $version = '2.6.10';
80
 
81
  /**
82
  * Holds various class instances
@@ -99,13 +101,12 @@ final class WeDevs_Dokan {
99
  * @uses add_action()
100
  */
101
  public function __construct() {
102
-
103
  $this->define_constants();
104
 
105
  register_activation_hook( __FILE__, array( $this, 'activate' ) );
106
  register_deactivation_hook( __FILE__, array( $this, 'deactivate' ) );
107
 
108
- add_action( 'plugins_loaded', array( $this, 'init_plugin' ) );
109
  }
110
 
111
  /**
@@ -173,6 +174,7 @@ final class WeDevs_Dokan {
173
  }
174
 
175
  require_once __DIR__ . '/includes/functions.php';
 
176
 
177
  $installer = new Dokan_Installer();
178
  $installer->do_install();
@@ -229,7 +231,6 @@ final class WeDevs_Dokan {
229
  * @return void
230
  */
231
  public function init_plugin() {
232
-
233
  $this->includes();
234
 
235
  $this->init_hooks();
@@ -245,11 +246,10 @@ final class WeDevs_Dokan {
245
  function init_hooks() {
246
 
247
  // Localize our plugin
248
-
249
  add_action( 'init', array( $this, 'localization_setup' ) );
250
 
251
  // initialize the classes
252
- add_action( 'after_setup_theme', array( $this, 'init_classes' ) );
253
  add_action( 'init', array( $this, 'wpdb_table_shortcuts' ) );
254
 
255
  add_filter( 'plugin_action_links_' . plugin_basename(__FILE__), array( $this, 'plugin_action_links' ) );
@@ -296,7 +296,6 @@ final class WeDevs_Dokan {
296
  require_once $inc_dir . 'admin/class-ajax.php';
297
  require_once $inc_dir . 'admin/class-admin-pointers.php';
298
  require_once $inc_dir . 'admin-functions.php';
299
- require_once $lib_dir . '/class-weforms-upsell.php';
300
  } else {
301
  require_once $inc_dir . 'template-tags.php';
302
  }
@@ -318,22 +317,21 @@ final class WeDevs_Dokan {
318
  new Dokan_Admin_User_Profile();
319
  Dokan_Admin_Ajax::init();
320
  new Dokan_Upgrade();
321
- new WeForms_Upsell( '409' );
322
- } else {
323
- new Dokan_Pageviews();
324
  }
325
 
 
326
  new Dokan_Rewrites();
327
  new Dokan_Tracker();
 
328
 
329
  $this->container['core'] = new Dokan_Core();
330
  $this->container['scripts'] = new Dokan_Scripts();
331
  $this->container['email'] = Dokan_Email::init();
332
  $this->container['vendor'] = new Dokan_Vendor_Manager();
333
- $this->container['product'] = new Dokan_Product_Manager();
334
 
335
  if ( is_user_logged_in() ) {
336
- Dokan_Template_Shortcodes::init();
337
  Dokan_Template_Main::init();
338
  Dokan_Template_Dashboard::init();
339
  Dokan_Template_Products::init();
@@ -342,10 +340,11 @@ final class WeDevs_Dokan {
342
  Dokan_Template_Settings::init();
343
  }
344
 
 
 
345
  if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
346
  Dokan_Ajax::init()->init_ajax();
347
  }
348
- // print_r( dokan()->vendor->get_total() );
349
  }
350
 
351
  /**
3
  Plugin Name: Dokan
4
  Plugin URI: https://wordpress.org/plugins/dokan-lite/
5
  Description: An e-commerce marketplace plugin for WordPress. Powered by WooCommerce and weDevs.
6
+ Version: 2.7.8
7
  Author: weDevs
8
  Author URI: https://wedevs.com/
9
  Text Domain: dokan-lite
10
+ WC requires at least: 2.6
11
+ WC tested up to: 3.3.3
12
  Domain Path: /languages/
13
  License: GPL2
14
  */
78
  *
79
  * @var string
80
  */
81
+ public $version = '2.7.8';
82
 
83
  /**
84
  * Holds various class instances
101
  * @uses add_action()
102
  */
103
  public function __construct() {
 
104
  $this->define_constants();
105
 
106
  register_activation_hook( __FILE__, array( $this, 'activate' ) );
107
  register_deactivation_hook( __FILE__, array( $this, 'deactivate' ) );
108
 
109
+ add_action( 'woocommerce_loaded', array( $this, 'init_plugin' ) );
110
  }
111
 
112
  /**
174
  }
175
 
176
  require_once __DIR__ . '/includes/functions.php';
177
+ require_once __DIR__ . '/includes/functions-compatibility.php';
178
 
179
  $installer = new Dokan_Installer();
180
  $installer->do_install();
231
  * @return void
232
  */
233
  public function init_plugin() {
 
234
  $this->includes();
235
 
236
  $this->init_hooks();
246
  function init_hooks() {
247
 
248
  // Localize our plugin
 
249
  add_action( 'init', array( $this, 'localization_setup' ) );
250
 
251
  // initialize the classes
252
+ add_action( 'init', array( $this, 'init_classes' ),5 );
253
  add_action( 'init', array( $this, 'wpdb_table_shortcuts' ) );
254
 
255
  add_filter( 'plugin_action_links_' . plugin_basename(__FILE__), array( $this, 'plugin_action_links' ) );
296
  require_once $inc_dir . 'admin/class-ajax.php';
297
  require_once $inc_dir . 'admin/class-admin-pointers.php';
298
  require_once $inc_dir . 'admin-functions.php';
 
299
  } else {
300
  require_once $inc_dir . 'template-tags.php';
301
  }
317
  new Dokan_Admin_User_Profile();
318
  Dokan_Admin_Ajax::init();
319
  new Dokan_Upgrade();
320
+ new Dokan_Setup_Wizard();
 
 
321
  }
322
 
323
+ new Dokan_Pageviews();
324
  new Dokan_Rewrites();
325
  new Dokan_Tracker();
326
+ new Dokan_Seller_Setup_Wizard();
327
 
328
  $this->container['core'] = new Dokan_Core();
329
  $this->container['scripts'] = new Dokan_Scripts();
330
  $this->container['email'] = Dokan_Email::init();
331
  $this->container['vendor'] = new Dokan_Vendor_Manager();
332
+ $this->container['product'] = new Dokan_Product_Manager();
333
 
334
  if ( is_user_logged_in() ) {
 
335
  Dokan_Template_Main::init();
336
  Dokan_Template_Dashboard::init();
337
  Dokan_Template_Products::init();
340
  Dokan_Template_Settings::init();
341
  }
342
 
343
+ Dokan_Template_Shortcodes::init();
344
+
345
  if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
346
  Dokan_Ajax::init()->init_ajax();
347
  }
 
348
  }
349
 
350
  /**
includes/admin-functions.php CHANGED
@@ -38,19 +38,31 @@ add_filter( 'woocommerce_reports_get_order_report_query', 'dokan_admin_order_rep
38
  function dokan_admin_shop_order_edit_columns( $existing_columns ) {
39
  $columns = array();
40
 
41
- $columns['cb'] = '<input type="checkbox" />';
42
- $columns['order_status'] = '<span class="status_head tips" data-tip="' . esc_attr__( 'Status', 'dokan-lite' ) . '">' . esc_attr__( 'Status', 'dokan-lite' ) . '</span>';
43
- $columns['order_title'] = __( 'Order', 'dokan-lite' );
44
- $columns['order_items'] = __( 'Purchased', 'dokan-lite' );
45
- $columns['shipping_address'] = __( 'Ship to', 'dokan-lite' );
46
-
47
- $columns['customer_message'] = '<span class="notes_head tips" data-tip="' . esc_attr__( 'Customer Message', 'dokan-lite' ) . '">' . esc_attr__( 'Customer Message', 'dokan-lite' ) . '</span>';
48
- $columns['order_notes'] = '<span class="order-notes_head tips" data-tip="' . esc_attr__( 'Order Notes', 'dokan-lite' ) . '">' . esc_attr__( 'Order Notes', 'dokan-lite' ) . '</span>';
49
- $columns['order_date'] = __( 'Date', 'dokan-lite' );
50
- $columns['order_total'] = __( 'Total', 'dokan-lite' );
51
- $columns['order_actions'] = __( 'Actions', 'dokan-lite' );
52
- $columns['seller'] = __( 'Vendor', 'dokan-lite' );
53
- $columns['suborder'] = __( 'Sub Order', 'dokan-lite' );
 
 
 
 
 
 
 
 
 
 
 
 
54
 
55
  return $columns;
56
  }
@@ -73,7 +85,7 @@ function dokan_shop_order_custom_columns( $col ) {
73
  }
74
 
75
  switch ($col) {
76
- case 'order_title':
77
  if ($post->post_parent !== 0) {
78
  echo '<strong>';
79
  echo __( 'Sub Order of', 'dokan-lite' );
@@ -162,6 +174,34 @@ function dokan_admin_shop_order_scripts() {
162
  tr.sub-order {
163
  background: #ECFFF2;
164
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
165
  </style>
166
  <?php
167
  }
@@ -282,8 +322,8 @@ function dokan_admin_report( $group_by = 'day', $year = '' ) {
282
 
283
  $group_by = apply_filters( 'dokan_report_group_by', $group_by );
284
 
285
- $start_date = isset( $_POST['start_date'] ) ? $_POST['start_date'] : '';
286
- $end_date = isset( $_POST['end_date'] ) ? $_POST['end_date'] : '';
287
  $current_year = date( 'Y' );
288
 
289
  if ( ! $start_date ) {
@@ -363,6 +403,18 @@ function dokan_admin_report( $group_by = 'day', $year = '' ) {
363
 
364
  ?>
365
 
 
 
 
 
 
 
 
 
 
 
 
 
366
  <script type="text/javascript">
367
  jQuery(function($) {
368
 
@@ -537,9 +589,9 @@ function dokan_send_notification_on_product_publish( $post ) {
537
  if ( $post->post_type != 'product' ) {
538
  return;
539
  }
540
-
541
  $seller = get_user_by( 'id', $post->post_author );
542
-
543
  do_action( 'dokan_pending_product_published_notification', $post, $seller );
544
  }
545
 
@@ -599,7 +651,7 @@ add_action( 'add_meta_boxes', 'dokan_add_seller_meta_box' );
599
  **/
600
  function dokan_override_product_author_by_admin( $product_id, $post ) {
601
  $product = wc_get_product( $product_id );
602
- $seller_id = !empty( $_POST['dokan_product_author_override'] ) ? $_POST['dokan_product_author_override'] : '-1';
603
 
604
  if ( $seller_id < 0 ) {
605
  return;
@@ -645,13 +697,13 @@ function dokan_admin_report_by_seller( $chosen_seller_id) {
645
  $year = '';
646
  $group_by = apply_filters( 'dokan_report_group_by', $group_by );
647
 
648
- $start_date = isset( $_POST['start_date'] ) ? $_POST['start_date'] : '';
649
- $end_date = isset( $_POST['end_date'] ) ? $_POST['end_date'] : '';
650
  $current_year = date( 'Y' );
651
 
652
- if ( ! isset( $chosen_seller_id ) || $chosen_seller_id=='' || $chosen_seller_id == Null) {
653
- return 0;
654
- }
655
 
656
  if ( ! $start_date ) {
657
  $start_date = date( 'Y-m-d', strtotime( date( 'Ym', current_time( 'timestamp' ) ) . '01' ) );
@@ -729,6 +781,18 @@ function dokan_admin_report_by_seller( $chosen_seller_id) {
729
  );
730
  ?>
731
 
 
 
 
 
 
 
 
 
 
 
 
 
732
  <script type="text/javascript">
733
  jQuery(function($) {
734
 
@@ -882,4 +946,4 @@ function dokan_admin_report_by_seller( $chosen_seller_id) {
882
  <?php
883
 
884
  return $data;
885
- }
38
  function dokan_admin_shop_order_edit_columns( $existing_columns ) {
39
  $columns = array();
40
 
41
+ if ( WC_VERSION > '3.2.6' ) {
42
+ $columns['cb'] = '<input type="checkbox" />';
43
+ $columns['order_number'] = __( 'Order', 'dokan-lite' );
44
+ $columns['order_date'] = __( 'Date', 'dokan-lite' );
45
+ $columns['order_status'] = __( 'Status', 'dokan-lite' );
46
+ $columns['billing_address'] = __( 'Billing', 'dokan-lite' );
47
+ $columns['shipping_address'] = __( 'Ship to', 'dokan-lite' );
48
+ $columns['order_total'] = __( 'Total', 'dokan-lite' );
49
+ $columns['seller'] = __( 'Vendor', 'dokan-lite' );
50
+ $columns['wc_actions'] = __( 'Actions', 'dokan-lite' );
51
+ $columns['suborder'] = __( 'Sub Order', 'dokan-lite' );
52
+ } else {
53
+ $columns['cb'] = '<input type="checkbox" />';
54
+ $columns['order_status'] = '<span class="status_head tips" data-tip="' . esc_attr__( 'Status', 'dokan-lite' ) . '">' . esc_attr__( 'Status', 'dokan-lite' ) . '</span>';
55
+ $columns['order_title'] = __( 'Order', 'dokan-lite' );
56
+ $columns['order_items'] = __( 'Purchased', 'dokan-lite' );
57
+ $columns['shipping_address'] = __( 'Ship to', 'dokan-lite' );
58
+ $columns['customer_message'] = '<span class="notes_head tips" data-tip="' . esc_attr__( 'Customer Message', 'dokan-lite' ) . '">' . esc_attr__( 'Customer Message', 'dokan-lite' ) . '</span>';
59
+ $columns['order_notes'] = '<span class="order-notes_head tips" data-tip="' . esc_attr__( 'Order Notes', 'dokan-lite' ) . '">' . esc_attr__( 'Order Notes', 'dokan-lite' ) . '</span>';
60
+ $columns['order_date'] = __( 'Date', 'dokan-lite' );
61
+ $columns['order_total'] = __( 'Total', 'dokan-lite' );
62
+ $columns['order_actions'] = __( 'Actions', 'dokan-lite' );
63
+ $columns['seller'] = __( 'Vendor', 'dokan-lite' );
64
+ $columns['suborder'] = __( 'Sub Order', 'dokan-lite' );
65
+ }
66
 
67
  return $columns;
68
  }
85
  }
86
 
87
  switch ($col) {
88
+ case 'order_number':
89
  if ($post->post_parent !== 0) {
90
  echo '<strong>';
91
  echo __( 'Sub Order of', 'dokan-lite' );
174
  tr.sub-order {
175
  background: #ECFFF2;
176
  }
177
+
178
+ th#order_number {
179
+ width: 21ch;
180
+ }
181
+
182
+ th#order_date {
183
+ width: 9ch;
184
+ }
185
+
186
+ th#order_status {
187
+ width: 12ch;
188
+ }
189
+
190
+ th#shipping_address {
191
+ width: 18ch;
192
+ }
193
+
194
+ th#wc_actions {
195
+ width: 9ch;
196
+ }
197
+
198
+ th#seller {
199
+ width: 6ch;
200
+ }
201
+
202
+ th#suborder {
203
+ width: 9ch;
204
+ }
205
  </style>
206
  <?php
207
  }
322
 
323
  $group_by = apply_filters( 'dokan_report_group_by', $group_by );
324
 
325
+ $start_date = isset( $_POST['start_date'] ) ? sanitize_text_field ( $_POST['start_date'] ): ''; // WPCS: CSRF ok.
326
+ $end_date = isset( $_POST['end_date'] ) ? sanitize_text_field( $_POST['end_date'] ): ''; // WPCS: CSRF ok.
327
  $current_year = date( 'Y' );
328
 
329
  if ( ! $start_date ) {
403
 
404
  ?>
405
 
406
+ <style type="text/css">
407
+ .chart-tooltip {
408
+ position: absolute;
409
+ display: none;
410
+ line-height: 1;
411
+ background: #333;
412
+ color: #fff;
413
+ padding: 3px 5px;
414
+ font-size: 11px;
415
+ border-radius: 3px;
416
+ }
417
+ </style>
418
  <script type="text/javascript">
419
  jQuery(function($) {
420
 
589
  if ( $post->post_type != 'product' ) {
590
  return;
591
  }
592
+
593
  $seller = get_user_by( 'id', $post->post_author );
594
+
595
  do_action( 'dokan_pending_product_published_notification', $post, $seller );
596
  }
597
 
651
  **/
652
  function dokan_override_product_author_by_admin( $product_id, $post ) {
653
  $product = wc_get_product( $product_id );
654
+ $seller_id = !empty( $_POST['dokan_product_author_override'] ) ? wc_clean( $_POST['dokan_product_author_override'] ): '-1'; // WPCS: CSRF ok.
655
 
656
  if ( $seller_id < 0 ) {
657
  return;
697
  $year = '';
698
  $group_by = apply_filters( 'dokan_report_group_by', $group_by );
699
 
700
+ $start_date = isset( $_POST['start_date'] ) ? $_POST['start_date'] : ''; // WPCS: CSRF ok.
701
+ $end_date = isset( $_POST['end_date'] ) ? $_POST['end_date'] : ''; // WPCS: CSRF ok.
702
  $current_year = date( 'Y' );
703
 
704
+ if ( !isset( $chosen_seller_id ) || $chosen_seller_id == '' || $chosen_seller_id == Null ) {
705
+ return 0;
706
+ }
707
 
708
  if ( ! $start_date ) {
709
  $start_date = date( 'Y-m-d', strtotime( date( 'Ym', current_time( 'timestamp' ) ) . '01' ) );
781
  );
782
  ?>
783
 
784
+ <style type="text/css">
785
+ .chart-tooltip {
786
+ position: absolute;
787
+ display: none;
788
+ line-height: 1;
789
+ background: #333;
790
+ color: #fff;
791
+ padding: 3px 5px;
792
+ font-size: 11px;
793
+ border-radius: 3px;
794
+ }
795
+ </style>
796
  <script type="text/javascript">
797
  jQuery(function($) {
798
 
946
  <?php
947
 
948
  return $data;
949
+ }
includes/admin/class-admin-pointers.php CHANGED
@@ -40,7 +40,7 @@ class Dokan_Admin_Pointers {
40
  * @return void
41
  */
42
  public function dismiss_screen( $screen = false ) {
43
- $screen = isset( $_POST['screen'] ) ? wc_clean( $_POST['screen'] ) : $screen;
44
  if ( !$screen ) {
45
  return;
46
  }
40
  * @return void
41
  */
42
  public function dismiss_screen( $screen = false ) {
43
+ $screen = isset( $_POST['screen'] ) ? wc_clean( $_POST['screen'] ) : $screen; // WPCS: CSRF ok.
44
  if ( !$screen ) {
45
  return;
46
  }
includes/admin/class-admin.php CHANGED
@@ -52,22 +52,23 @@ class Dokan_Admin {
52
  }
53
 
54
  // check if it has already been dismissed
55
- $offer_key = 'dokan_4th_yr_aniv_44_perc_discount';
56
  $hide_notice = get_option( $offer_key . '_tracking_notice', 'no' );
57
 
58
  if ( 'hide' == $hide_notice ) {
59
  return;
60
  }
61
 
62
- $product_text = ( ! WeDevs_Dokan::init()->is_pro_exists() ) ? __( 'Pro upgrade and all extensions', 'dokan-lite' ) : __( 'all extensions', 'dokan-lite' );
63
-
64
- $offer_msg = sprintf( __( '<h2><span class="dashicons dashicons-awards"></span> weDevs 4th Year Anniversary Offer</h2>', 'dokan-lite' ) );
65
- $offer_msg .= sprintf( __( '<p>Get <strong class="highlight-text">44&#37; discount</strong> on %2$s also <a target="_blank" href="%1$s"><strong>WIN any product</strong></a> from our 4th year anniversary giveaway. Offer ending soon!</p>', 'dokan-lite' ), 'https://wedevs.com/in/4years', $product_text );
66
  ?>
67
  <div class="notice is-dismissible" id="dokan-promotional-offer-notice">
68
  <img src="https://ps.w.org/dokan-lite/assets/icon-256x256.png?rev=1595714" alt="">
69
  <?php echo $offer_msg; ?>
70
  <span class="dashicons dashicons-megaphone"></span>
 
71
  </div>
72
 
73
  <style>
@@ -77,9 +78,26 @@ class Dokan_Admin {
77
  padding-left: 83px;
78
  }
79
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
80
  #dokan-promotional-offer-notice h2{
81
- font-size: 19px;
82
- color: rgba(250, 250, 250, 0.77);
 
83
  margin-bottom: 8px;
84
  font-weight: normal;
85
  margin-top: 15px;
@@ -92,7 +110,7 @@ class Dokan_Admin {
92
  #dokan-promotional-offer-notice img{
93
  position: absolute;
94
  width: 80px;
95
- top: 0px;
96
  left: 0px;
97
  }
98
 
@@ -102,6 +120,7 @@ class Dokan_Admin {
102
  }
103
 
104
  #dokan-promotional-offer-notice p{
 
105
  color: rgba(250, 250, 250, 0.77);
106
  font-size: 14px;
107
  margin-bottom: 10px;
@@ -126,7 +145,7 @@ class Dokan_Admin {
126
  #dokan-promotional-offer-notice span.dashicons-megaphone {
127
  position: absolute;
128
  top: 16px;
129
- right: 119px;
130
  color: rgba(253, 253, 253, 0.29);
131
  font-size: 96px;
132
  transform: rotate(-21deg);
@@ -193,9 +212,8 @@ class Dokan_Admin {
193
 
194
  do_action( 'dokan_admin_menu', $capability, $menu_position );
195
 
196
- add_submenu_page( 'dokan', __( 'Help', 'dokan' ), __( '<span style="color:#f18500">Help</span>', 'dokan' ), $capability, 'dokan-help', array( $this, 'help_page' ) );
197
  $settings = add_submenu_page( 'dokan', __( 'Settings', 'dokan-lite' ), __( 'Settings', 'dokan-lite' ), $capability, 'dokan-settings', array( $this, 'settings_page' ) );
198
- add_submenu_page( 'dokan', __( 'Add Ons', 'dokan-lite' ), __( 'Add-ons', 'dokan-lite' ), $capability, 'dokan-addons', array($this, 'addon_page' ) );
199
 
200
  /**
201
  * Welcome page
@@ -319,7 +337,7 @@ class Dokan_Admin {
319
 
320
  $args = array(
321
  'id' => 'dokan',
322
- 'title' => __( 'Dokan', 'admin' ),
323
  'href' => admin_url( 'admin.php?page=dokan' )
324
  );
325
 
52
  }
53
 
54
  // check if it has already been dismissed
55
+ $offer_key = 'dokan_package_offer';
56
  $hide_notice = get_option( $offer_key . '_tracking_notice', 'no' );
57
 
58
  if ( 'hide' == $hide_notice ) {
59
  return;
60
  }
61
 
62
+ $offer_msg = sprintf( __( '<h2>
63
+ Dokan is Getting More Affordable: Price Reduction & Changes in Packages
64
+ </h2>', 'dokan-lite' ) );
65
+ $offer_msg .= sprintf( __( '<p>Marketplaces are changing, so is Dokan Multivendor. We are reducing Dokan Pro entry package price and bringing entirely new pricing where you get addons pre-activated for free depending on your package.</p>', 'dokan-lite' ) );
66
  ?>
67
  <div class="notice is-dismissible" id="dokan-promotional-offer-notice">
68
  <img src="https://ps.w.org/dokan-lite/assets/icon-256x256.png?rev=1595714" alt="">
69
  <?php echo $offer_msg; ?>
70
  <span class="dashicons dashicons-megaphone"></span>
71
+ <a href="https://wedevs.com/in/dokan-new-package-blog-via-lite" class="button button-primary promo-btn" target="_blank"><?php _e( 'View Package', 'dokan-lite' ); ?></a>
72
  </div>
73
 
74
  <style>
78
  padding-left: 83px;
79
  }
80
 
81
+ #dokan-promotional-offer-notice a.promo-btn{
82
+ background: #fff;
83
+ border-color: #fafafa #fafafa #fafafa;
84
+ box-shadow: 0 1px 0 #fafafa;
85
+ color: #F35E33;
86
+ text-decoration: none;
87
+ text-shadow: none;
88
+ position: absolute;
89
+ top: 30px;
90
+ right: 26px;
91
+ height: 40px;
92
+ line-height: 40px;
93
+ width: 130px;
94
+ text-align: center;
95
+ }
96
+
97
  #dokan-promotional-offer-notice h2{
98
+ font-size: 18px;
99
+ width: 85%;
100
+ color: rgba(250, 250, 250, 1);
101
  margin-bottom: 8px;
102
  font-weight: normal;
103
  margin-top: 15px;
110
  #dokan-promotional-offer-notice img{
111
  position: absolute;
112
  width: 80px;
113
+ top: 10px;
114
  left: 0px;
115
  }
116
 
120
  }
121
 
122
  #dokan-promotional-offer-notice p{
123
+ width: 85%;
124
  color: rgba(250, 250, 250, 0.77);
125
  font-size: 14px;
126
  margin-bottom: 10px;
145
  #dokan-promotional-offer-notice span.dashicons-megaphone {
146
  position: absolute;
147
  top: 16px;
148
+ right: 248px;
149
  color: rgba(253, 253, 253, 0.29);
150
  font-size: 96px;
151
  transform: rotate(-21deg);
212
 
213
  do_action( 'dokan_admin_menu', $capability, $menu_position );
214
 
215
+ add_submenu_page( 'dokan', __( 'Help', 'dokan-lite' ), __( '<span style="color:#f18500">Help</span>', 'dokan-lite' ), $capability, 'dokan-help', array( $this, 'help_page' ) );
216
  $settings = add_submenu_page( 'dokan', __( 'Settings', 'dokan-lite' ), __( 'Settings', 'dokan-lite' ), $capability, 'dokan-settings', array( $this, 'settings_page' ) );
 
217
 
218
  /**
219
  * Welcome page
337
 
338
  $args = array(
339
  'id' => 'dokan',
340
+ 'title' => __( 'Dokan', 'dokan-lite' ),
341
  'href' => admin_url( 'admin.php?page=dokan' )
342
  );
343
 
includes/admin/class-ajax.php CHANGED
@@ -84,6 +84,10 @@ class Dokan_Admin_Ajax {
84
  $amount = $postdata['amount'][$withdraw_id];
85
  $method = $postdata['method'][$withdraw_id];
86
 
 
 
 
 
87
  $withdraw->update_status( $withdraw_id, $user_id, 1 );
88
 
89
  do_action( 'dokan_withdraw_request_approved', $user_id, $amount, $method );
@@ -112,9 +116,8 @@ class Dokan_Admin_Ajax {
112
  * @return void
113
  */
114
  public function dismiss_promotional_offer() {
115
-
116
  if ( ! empty( $_POST['dokan_promotion_dismissed'] ) ) {
117
- $offer_key = 'dokan_4th_yr_aniv_44_perc_discount';
118
  update_option( $offer_key . '_tracking_notice', 'hide' );
119
  }
120
  }
84
  $amount = $postdata['amount'][$withdraw_id];
85
  $method = $postdata['method'][$withdraw_id];
86
 
87
+ if ( dokan_get_seller_balance( $user_id, false ) < $amount ) {
88
+ continue;
89
+ }
90
+
91
  $withdraw->update_status( $withdraw_id, $user_id, 1 );
92
 
93
  do_action( 'dokan_withdraw_request_approved', $user_id, $amount, $method );
116
  * @return void
117
  */
118
  public function dismiss_promotional_offer() {
 
119
  if ( ! empty( $_POST['dokan_promotion_dismissed'] ) ) {
120
+ $offer_key = 'dokan_package_offer';
121
  update_option( $offer_key . '_tracking_notice', 'hide' );
122
  }
123
  }
includes/admin/class-settings.php CHANGED
@@ -217,6 +217,8 @@ class Dokan_Settings {
217
  'desc' => __( 'Amount you get from sales', 'dokan-lite' ),
218
  'default' => '10',
219
  'type' => 'number',
 
 
220
  ),
221
  'order_status_change' => array(
222
  'name' => 'order_status_change',
217
  'desc' => __( 'Amount you get from sales', 'dokan-lite' ),
218
  'default' => '10',
219
  'type' => 'number',
220
+ 'min' => '0',
221
+ 'step' => 'any',
222
  ),
223
  'order_status_change' => array(
224
  'name' => 'order_status_change',
includes/admin/setup-wizard.php CHANGED
@@ -104,7 +104,7 @@ class Dokan_Setup_Wizard {
104
 
105
  $this->enqueue_scripts();
106
 
107
- if ( ! empty( $_POST['save_step'] ) && isset( $this->steps[ $this->step ]['handler'] ) ) {
108
  call_user_func( $this->steps[ $this->step ]['handler'] );
109
  }
110
 
@@ -136,6 +136,7 @@ class Dokan_Setup_Wizard {
136
  <?php wp_print_scripts( 'wc-setup' ); ?>
137
  <?php do_action( 'admin_print_styles' ); ?>
138
  <?php do_action( 'admin_head' ); ?>
 
139
  <style type="text/css">
140
  .wc-setup-steps {
141
  justify-content: center;
@@ -527,6 +528,4 @@ class Dokan_Setup_Wizard {
527
  </div>
528
  <?php
529
  }
530
- }
531
-
532
- new Dokan_Setup_Wizard();
104
 
105
  $this->enqueue_scripts();
106
 
107
+ if ( ! empty( $_POST['save_step'] ) && isset( $this->steps[ $this->step ]['handler'] ) ) { // WPCS: CSRF ok.
108
  call_user_func( $this->steps[ $this->step ]['handler'] );
109
  }
110
 
136
  <?php wp_print_scripts( 'wc-setup' ); ?>
137
  <?php do_action( 'admin_print_styles' ); ?>
138
  <?php do_action( 'admin_head' ); ?>
139
+ <?php do_action( 'dokan_setup_wizard_styles' ); ?>
140
  <style type="text/css">
141
  .wc-setup-steps {
142
  justify-content: center;
528
  </div>
529
  <?php
530
  }
531
+ }
 
 
includes/admin/views/help.php CHANGED
@@ -1,5 +1,5 @@
1
  <div class="wrap">
2
- <h1 style="margin-bottom: 20px;"><?php _e( 'Dokan Help', 'dokan' ); ?> <a href="http://docs.wedevs.com/docs/dokan/" target="_blank" class="page-title-action"><?php _e( 'View all Documentations', 'dokan' ); ?></a></h1>
3
 
4
  <?php
5
  $help_docs = get_transient( 'dokan_help_docs' );
1
  <div class="wrap">
2
+ <h1 style="margin-bottom: 20px;"><?php _e( 'Dokan Help', 'dokan-lite' ); ?> <a href="http://docs.wedevs.com/docs/dokan/" target="_blank" class="page-title-action"><?php _e( 'View all Documentations', 'dokan-lite' ); ?></a></h1>
3
 
4
  <?php
5
  $help_docs = get_transient( 'dokan_help_docs' );
includes/class-core.php CHANGED
@@ -40,8 +40,7 @@ class Dokan_Core {
40
  $no_access = dokan_get_option( 'admin_access', 'dokan_general', 'on' );
41
  $valid_pages = array( 'admin-ajax.php', 'admin-post.php', 'async-upload.php', 'media-upload.php' );
42
  $user_role = reset( $current_user->roles );
43
-
44
- if ( ( $no_access == 'on' ) && ( !in_array( $pagenow, $valid_pages ) ) && in_array( $user_role, array( 'seller', 'customer' ) ) ) {
45
  wp_redirect( home_url() );
46
  exit;
47
  }
@@ -65,8 +64,12 @@ class Dokan_Core {
65
  function hide_others_uploads( $where ) {
66
  global $pagenow, $wpdb;
67
 
68
- if ( ( $pagenow == 'upload.php' || $pagenow == 'media-upload.php' ) && current_user_can( 'dokandar' ) ) {
69
- $user_id = get_current_user_id();
 
 
 
 
70
 
71
  $where .= " AND $wpdb->posts.post_author = $user_id";
72
  }
40
  $no_access = dokan_get_option( 'admin_access', 'dokan_general', 'on' );
41
  $valid_pages = array( 'admin-ajax.php', 'admin-post.php', 'async-upload.php', 'media-upload.php' );
42
  $user_role = reset( $current_user->roles );
43
+ if ( ( $no_access == 'on' ) && ( !in_array( $pagenow, $valid_pages ) ) && in_array( $user_role, array( 'seller', 'customer', 'vendor_staff' ) ) ) {
 
44
  wp_redirect( home_url() );
45
  exit;
46
  }
64
  function hide_others_uploads( $where ) {
65
  global $pagenow, $wpdb;
66
 
67
+ if ( current_user_can( 'manage_woocommerce' ) ) {
68
+ return $where;
69
+ }
70
+
71
+ if ( ( $pagenow == 'upload.php' || $pagenow == 'media-upload.php' ) && current_user_can( 'dokandar' ) ) {
72
+ $user_id = dokan_get_current_user_id();
73
 
74
  $where .= " AND $wpdb->posts.post_author = $user_id";
75
  }
includes/class-scripts.php CHANGED
@@ -14,7 +14,7 @@ class Dokan_Scripts {
14
 
15
  add_action( 'init', array( $this, 'register_all_scripts' ), 10 );
16
  add_filter( 'dokan_localized_args', array( $this, 'conditional_localized_args' ) );
17
-
18
  if ( is_admin() ) {
19
  add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_admin_scripts' ) );
20
  } else {
@@ -27,10 +27,17 @@ class Dokan_Scripts {
27
  */
28
  public function enqueue_admin_scripts( $hook ) {
29
  wp_enqueue_style( 'dokan-admin-css', DOKAN_PLUGIN_ASSEST . '/css/admin.css', false, time() );
30
-
31
  wp_enqueue_script( 'dokan-tooltip' );
32
  wp_enqueue_script( 'dokan_slider_admin', DOKAN_PLUGIN_ASSEST . '/js/dokan-admin.js', array( 'jquery' ) );
33
 
 
 
 
 
 
 
 
 
34
  if ( 'plugins.php' == $hook ) {
35
  wp_enqueue_style( 'dokan-plugin-list-css', DOKAN_PLUGIN_ASSEST . '/css/plugin.css', false, null );
36
  }
@@ -45,45 +52,45 @@ class Dokan_Scripts {
45
  $vendor = DOKAN_PLUGIN_ASSEST . '/vendors';
46
 
47
  // Register Vendors styles
48
- wp_register_style( 'jquery-ui', $vendor . '/jquery-ui/jquery-ui-1.10.0.custom.css', false, null );
49
- wp_register_style( 'dokan-fontawesome', $vendor . '/font-awesome/font-awesome.min.css', false, null );
50
- wp_register_style( 'dokan-chosen-style', $vendor . '/chosen/chosen.min.css', false, null );
51
- wp_register_style( 'dokan-magnific-popup', $vendor . '/magnific/magnific-popup.css', false, null );
52
- wp_register_style( 'dokan-select2-css', $vendor . '/select2/select2.css', false, null );
53
 
54
  // Core styles
55
- wp_register_style( 'dokan-style', DOKAN_PLUGIN_ASSEST.'/css/style.css', false, null );
56
 
57
  if ( is_rtl() ) {
58
  // RTL supported style
59
- wp_register_style( 'dokan-rtl-style', DOKAN_PLUGIN_ASSEST.'/css/rtl.css', false, null );
60
  }
61
 
62
  // Register Vendors scripts
63
- wp_register_script( 'dokan-chart', $vendor . '/chart/Chart.min.js', false, null, true );
64
- wp_register_script( 'dokan-tabs', $vendor . '/easytab/jquery.easytabs.min.js', false, null, true );
65
- wp_register_script( 'dokan-chosen', $vendor . '/chosen/chosen.jquery.min.js', array( 'jquery' ), null, true );
66
- wp_register_script( 'dokan-popup', $vendor . '/magnific/jquery.magnific-popup.min.js', array( 'jquery' ), null, true );
67
- wp_register_script( 'dokan-tooltip', $vendor . '/tooltips/tooltips.js', array( 'jquery' ), null, true );
68
- wp_register_script( 'dokan-form-validate', $vendor . '/form-validate/form-validate.js', array( 'jquery' ), null, true );
69
- wp_register_script( 'dokan-select2-js', $vendor . '/select2/select2.full.min.js', array( 'jquery' ), null, true );
70
 
71
  // Image cropping scripts
72
- wp_register_script( 'customize-base', site_url( 'wp-includes/js/customize-base.js' ), array( 'jquery', 'json2', 'underscore' ), null, true );
73
- wp_register_script( 'customize-model', site_url( 'wp-includes/js/customize-models.js' ), array( 'underscore', 'backbone' ), null, true );
74
 
75
  // Register core scripts
76
- wp_register_script( 'dokan-flot', DOKAN_PLUGIN_ASSEST.'/js/flot-all.min.js', false, null, true );
77
- wp_register_script( 'dokan-script', DOKAN_PLUGIN_ASSEST.'/js/dokan.js', array( 'imgareaselect', 'customize-base', 'customize-model' ), null, true );
 
78
 
79
  do_action( 'dokan_register_scripts' );
80
  }
81
-
82
  /**
83
  * Enqueue front-end scripts
84
  */
85
  public function enqueue_front_scripts() {
86
-
87
 
88
  if ( !function_exists( 'WC' ) ) {
89
  return;
@@ -110,9 +117,11 @@ class Dokan_Scripts {
110
  ),
111
  'delete_confirm' => __( 'Are you sure?', 'dokan-lite' ),
112
  'wrong_message' => __( 'Something went wrong. Please try again.', 'dokan-lite' ),
113
- 'vendor_percentage' => dokan_get_seller_percentage( get_current_user_id() ),
114
- 'commission_type' => dokan_get_commission_type( get_current_user_id() ),
115
-
 
 
116
  );
117
 
118
  $localize_script = apply_filters( 'dokan_localized_args', $default_script );
@@ -125,7 +134,7 @@ class Dokan_Scripts {
125
  }
126
 
127
  // store and my account page
128
- if ( dokan_is_store_page() || dokan_is_store_review_page() || is_account_page() ) {
129
 
130
  if ( DOKAN_LOAD_STYLE ) {
131
  wp_enqueue_style( 'dokan-select2-css' );
@@ -141,6 +150,7 @@ class Dokan_Scripts {
141
  wp_enqueue_script( 'dokan-tooltip' );
142
  wp_enqueue_script( 'dokan-chosen' );
143
  wp_enqueue_script( 'dokan-form-validate' );
 
144
  wp_enqueue_script( 'dokan-script' );
145
  wp_enqueue_script( 'dokan-select2-js' );
146
  }
@@ -252,12 +262,13 @@ class Dokan_Scripts {
252
  */
253
  function conditional_localized_args( $default_args ) {
254
 
255
- if ( dokan_is_seller_dashboard()
256
- || ( get_query_var( 'edit' ) && is_singular( 'product' ) )
257
- || dokan_is_store_page()
258
- || is_account_page()
 
259
  || apply_filters( 'dokan_force_load_extra_args', false )
260
- )
261
  {
262
  $general_settings = get_option( 'dokan_general', array() );
263
 
14
 
15
  add_action( 'init', array( $this, 'register_all_scripts' ), 10 );
16
  add_filter( 'dokan_localized_args', array( $this, 'conditional_localized_args' ) );
17
+
18
  if ( is_admin() ) {
19
  add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_admin_scripts' ) );
20
  } else {
27
  */
28
  public function enqueue_admin_scripts( $hook ) {
29
  wp_enqueue_style( 'dokan-admin-css', DOKAN_PLUGIN_ASSEST . '/css/admin.css', false, time() );
 
30
  wp_enqueue_script( 'dokan-tooltip' );
31
  wp_enqueue_script( 'dokan_slider_admin', DOKAN_PLUGIN_ASSEST . '/js/dokan-admin.js', array( 'jquery' ) );
32
 
33
+ global $post;
34
+
35
+ if ( get_post_type( $post ) == 'dokan_slider' ) {
36
+ wp_enqueue_script( 'media-upload' );
37
+ wp_enqueue_script( 'thickbox' );
38
+ wp_enqueue_style( 'thickbox' );
39
+ }
40
+
41
  if ( 'plugins.php' == $hook ) {
42
  wp_enqueue_style( 'dokan-plugin-list-css', DOKAN_PLUGIN_ASSEST . '/css/plugin.css', false, null );
43
  }
52
  $vendor = DOKAN_PLUGIN_ASSEST . '/vendors';
53
 
54
  // Register Vendors styles
55
+ wp_register_style( 'jquery-ui', $vendor . '/jquery-ui/jquery-ui-1.10.0.custom.css', false, DOKAN_PLUGIN_VERSION );
56
+ wp_register_style( 'dokan-fontawesome', $vendor . '/font-awesome/font-awesome.min.css', false, DOKAN_PLUGIN_VERSION );
57
+ wp_register_style( 'dokan-chosen-style', $vendor . '/chosen/chosen.min.css', false, DOKAN_PLUGIN_VERSION );
58
+ wp_register_style( 'dokan-magnific-popup', $vendor . '/magnific/magnific-popup.css', false, DOKAN_PLUGIN_VERSION );
59
+ wp_register_style( 'dokan-select2-css', $vendor . '/select2/select2.css', false, DOKAN_PLUGIN_VERSION );
60
 
61
  // Core styles
62
+ wp_register_style( 'dokan-style', DOKAN_PLUGIN_ASSEST.'/css/style.css', false, DOKAN_PLUGIN_VERSION );
63
 
64
  if ( is_rtl() ) {
65
  // RTL supported style
66
+ wp_register_style( 'dokan-rtl-style', DOKAN_PLUGIN_ASSEST.'/css/rtl.css', false, DOKAN_PLUGIN_VERSION );
67
  }
68
 
69
  // Register Vendors scripts
70
+ wp_register_script( 'dokan-chart', $vendor . '/chart/Chart.min.js', false, DOKAN_PLUGIN_VERSION, true );
71
+ wp_register_script( 'dokan-tabs', $vendor . '/easytab/jquery.easytabs.min.js', false, DOKAN_PLUGIN_VERSION, true );
72
+ wp_register_script( 'dokan-chosen', $vendor . '/chosen/chosen.jquery.min.js', array( 'jquery' ), DOKAN_PLUGIN_VERSION, true );
73
+ wp_register_script( 'dokan-popup', $vendor . '/magnific/jquery.magnific-popup.min.js', array( 'jquery' ), DOKAN_PLUGIN_VERSION, true );
74
+ wp_register_script( 'dokan-tooltip', $vendor . '/tooltips/tooltips.js', array( 'jquery' ), DOKAN_PLUGIN_VERSION, true );
75
+ wp_register_script( 'dokan-form-validate', $vendor . '/form-validate/form-validate.js', array( 'jquery' ), DOKAN_PLUGIN_VERSION, true );
76
+ wp_register_script( 'dokan-select2-js', $vendor . '/select2/select2.full.min.js', array( 'jquery' ), DOKAN_PLUGIN_VERSION, true );
77
 
78
  // Image cropping scripts
79
+ wp_register_script( 'customize-base', site_url( 'wp-includes/js/customize-base.js' ), array( 'jquery', 'json2', 'underscore' ), DOKAN_PLUGIN_VERSION, true );
80
+ wp_register_script( 'customize-model', site_url( 'wp-includes/js/customize-models.js' ), array( 'underscore', 'backbone' ), DOKAN_PLUGIN_VERSION, true );
81
 
82
  // Register core scripts
83
+ wp_register_script( 'dokan-flot', DOKAN_PLUGIN_ASSEST.'/js/flot-all.min.js', false, DOKAN_PLUGIN_VERSION, true );
84
+ wp_register_script( 'speaking-url', DOKAN_PLUGIN_ASSEST . '/js/speakingurl.min.js', false, DOKAN_PLUGIN_VERSION, true );
85
+ wp_register_script( 'dokan-script', DOKAN_PLUGIN_ASSEST.'/js/dokan.js', array( 'imgareaselect', 'customize-base', 'customize-model' ), DOKAN_PLUGIN_VERSION, true );
86
 
87
  do_action( 'dokan_register_scripts' );
88
  }
89
+
90
  /**
91
  * Enqueue front-end scripts
92
  */
93
  public function enqueue_front_scripts() {
 
94
 
95
  if ( !function_exists( 'WC' ) ) {
96
  return;
117
  ),
118
  'delete_confirm' => __( 'Are you sure?', 'dokan-lite' ),
119
  'wrong_message' => __( 'Something went wrong. Please try again.', 'dokan-lite' ),
120
+ 'vendor_percentage' => dokan_get_seller_percentage( dokan_get_current_user_id() ),
121
+ 'commission_type' => dokan_get_commission_type( dokan_get_current_user_id() ),
122
+ 'rounding_precision' => wc_get_rounding_precision(),
123
+ 'mon_decimal_point' => wc_get_price_decimal_separator(),
124
+
125
  );
126
 
127
  $localize_script = apply_filters( 'dokan_localized_args', $default_script );
134
  }
135
 
136
  // store and my account page
137
+ if ( dokan_is_store_page() || dokan_is_store_review_page() || is_account_page() || is_product() ) {
138
 
139
  if ( DOKAN_LOAD_STYLE ) {
140
  wp_enqueue_style( 'dokan-select2-css' );
150
  wp_enqueue_script( 'dokan-tooltip' );
151
  wp_enqueue_script( 'dokan-chosen' );
152
  wp_enqueue_script( 'dokan-form-validate' );
153
+ wp_enqueue_script( 'speaking-url' );
154
  wp_enqueue_script( 'dokan-script' );
155
  wp_enqueue_script( 'dokan-select2-js' );
156
  }
262
  */
263
  function conditional_localized_args( $default_args ) {
264
 
265
+ if ( dokan_is_seller_dashboard()
266
+ || ( get_query_var( 'edit' ) && is_singular( 'product' ) )
267
+ || dokan_is_store_page()
268
+ || is_account_page()
269
+ || is_product()
270
  || apply_filters( 'dokan_force_load_extra_args', false )
271
+ )
272
  {
273
  $general_settings = get_option( 'dokan_general', array() );
274
 
includes/class-vendor.php CHANGED
@@ -324,7 +324,7 @@ class Dokan_Vendor {
324
  WHERE seller_id = %d AND DATE(p.post_date) <= %s AND order_status IN({$status})";
325
 
326
  $result = $wpdb->get_row( $wpdb->prepare( $sql, $this->id, $this->id, $date ) );
327
- $earning = $result->earnings - $result->withdraw;
328
 
329
  wp_cache_set( $cache_key, $earning, $cache_group );
330
  dokan_cache_update_group( $cache_key , $cache_group );
324
  WHERE seller_id = %d AND DATE(p.post_date) <= %s AND order_status IN({$status})";
325
 
326
  $result = $wpdb->get_row( $wpdb->prepare( $sql, $this->id, $this->id, $date ) );
327
+ $earning = (float) $result->earnings - (float) round( $result->withdraw, wc_get_rounding_precision() );
328
 
329
  wp_cache_set( $cache_key, $earning, $cache_group );
330
  dokan_cache_update_group( $cache_key , $cache_group );
includes/functions.php CHANGED
@@ -26,6 +26,28 @@ function dokana_admin_menu_capability() {
26
  return apply_filters( 'dokan_menu_capability', 'manage_options' );
27
  }
28
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29
  /**
30
  * Check if a user is seller
31
  *
@@ -70,7 +92,7 @@ function dokan_is_product_author( $product_id = 0 ) {
70
  $author = get_post_field( 'post_author', $product_id );
71
  }
72
 
73
- if ( $author == get_current_user_id() ) {
74
  return true;
75
  }
76
 
@@ -133,7 +155,7 @@ function dokan_redirect_login() {
133
  * @param string $redirect
134
  */
135
  function dokan_redirect_if_not_seller( $redirect = '' ) {
136
- if ( !dokan_is_user_seller( get_current_user_id() ) ) {
137
  $redirect = empty( $redirect ) ? home_url( '/' ) : $redirect;
138
 
139
  wp_redirect( $redirect );
@@ -166,6 +188,7 @@ function dokan_delete_product_handler() {
166
  }
167
 
168
  wp_delete_post( $product_id );
 
169
 
170
  $redirect = apply_filters( 'dokan_add_new_product_redirect', dokan_get_navigation_url( 'products' ), '' );
171
 
@@ -398,28 +421,30 @@ if ( !function_exists( 'dokan_get_seller_percentage' ) ) :
398
  */
399
  function dokan_get_seller_percentage( $seller_id = 0, $product_id = 0 ) {
400
 
401
- //return product wise percentage
 
 
 
402
  if ( $product_id ) {
403
  $_per_product_commission = get_post_meta( $product_id, '_per_product_admin_commission', true );
404
  if ( $_per_product_commission != '' ) {
405
- return (float) ( 100 - $_per_product_commission );
406
  }
407
  $category_commission = dokan_get_category_wise_seller_commission( $product_id );
408
  if ( !empty( $category_commission ) ) {
409
- return (float) $category_commission;
410
  }
411
  }
412
 
413
- //return seller wise percentage
414
  if ( $seller_id ) {
415
  $admin_commission = get_user_meta( $seller_id, 'dokan_admin_percentage', true );
416
  if ( $admin_commission != '' ) {
417
- return (float) ( 100 - $admin_commission );
418
  }
419
  }
420
 
421
- $global_percentage = dokan_get_option( 'admin_percentage', 'dokan_selling' , 0 );
422
- return (float) ( 100 - $global_percentage );
423
  }
424
 
425
  endif;
@@ -686,11 +711,11 @@ function dokan_get_product_types( $status = '' ) {
686
  function dokan_posted_input( $key, $array = false ) {
687
 
688
  //If array value is submitted return array
689
- if ( $array && isset( $_POST[$key] ) ) {
690
- return $_POST[$key];
691
  }
692
 
693
- $value = isset( $_POST[$key] ) ? trim( $_POST[$key] ) : '';
694
  return esc_attr( $value );
695
  }
696
 
@@ -701,7 +726,7 @@ function dokan_posted_input( $key, $array = false ) {
701
  * @return string
702
  */
703
  function dokan_posted_textarea( $key ) {
704
- $value = isset( $_POST[$key] ) ? trim( $_POST[$key] ) : '';
705
 
706
  return esc_textarea( $value );
707
  }
@@ -998,13 +1023,14 @@ function dokan_log( $message ) {
998
  * @return array
999
  */
1000
  function dokan_media_uploader_restrict( $args ) {
 
1001
  // bail out for admin and editor
1002
  if ( current_user_can( 'delete_pages' ) ) {
1003
  return $args;
1004
  }
1005
 
1006
  if ( current_user_can( 'dokandar' ) ) {
1007
- $args['author'] = get_current_user_id();
1008
 
1009
  return $args;
1010
  }
@@ -1274,8 +1300,10 @@ function dokan_disable_admin_bar( $show_admin_bar ) {
1274
  if ( $current_user->ID !== 0 ) {
1275
  $role = reset( $current_user->roles );
1276
 
1277
- if ( in_array( $role, array( 'seller', 'customer' ) ) ) {
1278
- return false;
 
 
1279
  }
1280
  }
1281
 
@@ -1284,6 +1312,49 @@ function dokan_disable_admin_bar( $show_admin_bar ) {
1284
 
1285
  add_filter( 'show_admin_bar', 'dokan_disable_admin_bar' );
1286
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1287
  /**
1288
  * Human readable number format.
1289
  *
@@ -1321,18 +1392,17 @@ function dokan_get_coupon_edit_url( $coupon_id, $coupon_page = '' ) {
1321
  }
1322
 
1323
  /**
1324
- * User avatar wrapper for custom uploaded avatar
 
1325
  *
1326
- * @since 2.0
1327
  *
1328
- * @param string $avatar
1329
- * @param mixed $id_or_email
1330
- * @param int $size
1331
- * @param string $default
1332
- * @param string $alt
1333
- * @return string image tag of the user avatar
1334
  */
1335
- function dokan_get_avatar( $avatar, $id_or_email, $size, $default, $alt ) {
1336
 
1337
  if ( is_numeric( $id_or_email ) ) {
1338
  $user = get_user_by( 'id', $id_or_email );
@@ -1340,29 +1410,34 @@ function dokan_get_avatar( $avatar, $id_or_email, $size, $default, $alt ) {
1340
  if ( $id_or_email->user_id != '0' ) {
1341
  $user = get_user_by( 'id', $id_or_email->user_id );
1342
  } else {
1343
- return $avatar;
1344
  }
1345
  } else {
1346
  $user = get_user_by( 'email', $id_or_email );
1347
  }
1348
 
1349
- if ( !$user ) {
1350
- return $avatar;
1351
  }
1352
 
1353
  // see if there is a user_avatar meta field
1354
  $user_avatar = get_user_meta( $user->ID, 'dokan_profile_settings', true );
1355
  $gravatar_id = isset( $user_avatar['gravatar'] ) ? $user_avatar['gravatar'] : 0;
 
1356
  if ( empty( $gravatar_id ) ) {
1357
- return $avatar;
1358
  }
1359
 
1360
- $avater_url = wp_get_attachment_thumb_url( $gravatar_id );
 
 
 
 
1361
 
1362
- return sprintf( '<img src="%1$s" alt="%2$s" width="%3$s" height="%3$s" class="avatar photo">', esc_url( $avater_url ), $alt, $size );
1363
  }
1364
 
1365
- add_filter( 'get_avatar', 'dokan_get_avatar', 99, 5 );
1366
 
1367
  /**
1368
  * Get navigation url for the dokan dashboard
@@ -1549,7 +1624,7 @@ function dokan_product_listing_filter_months_dropdown( $user_id ) {
1549
  $date = isset( $_GET['date'] ) ? (int) $_GET['date'] : 0;
1550
  ?>
1551
  <select name="date" id="filter-by-date" class="dokan-form-control">
1552
- <option<?php selected( $date, 0 ); ?> value="0"><?php _e( 'All dates' ); ?></option>
1553
  <?php
1554
  foreach ( $months as $arc_row ) {
1555
  if ( 0 == $arc_row->year )
@@ -1562,7 +1637,7 @@ function dokan_product_listing_filter_months_dropdown( $user_id ) {
1562
  selected( $date, $year . $month, false ),
1563
  esc_attr( $year . $month ),
1564
  /* translators: 1: month name, 2: 4-digit year */
1565
- sprintf( __( '%1$s %2$d' ), $wp_locale->get_month( $month ), $year )
1566
  );
1567
  }
1568
  ?>
@@ -1708,7 +1783,7 @@ function dokan_seller_address_fields( $verified = false, $required = false ) {
1708
  )
1709
  );
1710
 
1711
- $profile_info = dokan_get_store_info( get_current_user_id() );
1712
 
1713
  dokan_get_template_part( 'settings/address-form', '', array(
1714
  'disabled' => $disabled,
@@ -1730,7 +1805,7 @@ function dokan_seller_address_fields( $verified = false, $required = false ) {
1730
  function dokan_get_seller_address( $seller_id = '', $get_array = false ) {
1731
 
1732
  if ( $seller_id == '' ) {
1733
- $seller_id = get_current_user_id();
1734
  }
1735
 
1736
  $profile_info = dokan_get_store_info( $seller_id );
@@ -1796,39 +1871,40 @@ function dokan_get_seller_address( $seller_id = '', $get_array = false ) {
1796
  */
1797
  function dokan_get_seller_short_address( $store_id, $line_break = true ) {
1798
  $store_address = dokan_get_seller_address( $store_id, true );
1799
-
 
 
 
 
 
 
1800
  $short_address = array();
1801
  $formatted_address = '';
1802
 
1803
  if ( ! empty( $store_address['street_1'] ) && empty( $store_address['street_2'] ) ) {
1804
- $short_address[] = $store_address['street_1'];
1805
  } else if ( empty( $store_address['street_1'] ) && ! empty( $store_address['street_2'] ) ) {
1806
- $short_address[] = $store_address['street_2'];
1807
  } else if ( ! empty( $store_address['street_1'] ) && ! empty( $store_address['street_2'] ) ) {
1808
- $short_address[] = $store_address['street_1'];
1809
  }
1810
 
1811
  if ( ! empty( $store_address['city'] ) && ! empty( $store_address['city'] ) ) {
1812
- $short_address[] = $store_address['city'];
1813
  }
1814
 
1815
  if ( ! empty( $store_address['state'] ) && ! empty( $store_address['country'] ) ) {
1816
- $short_address[] = $store_address['state'] . ', ' . $store_address['country'];
1817
  } else if ( ! empty( $store_address['country'] ) ) {
1818
- $short_address[] = $store_address['country'];
1819
  }
1820
 
1821
  if ( ! empty( $short_address ) && $line_break ) {
1822
  $formatted_address = implode( '<br>', $short_address );
1823
  } else {
1824
- if ( count( $short_address ) > 1 ) {
1825
- $formatted_address = implode( ', ', $short_address );
1826
- } else {
1827
- $formatted_address = implode( ' ', $short_address );
1828
- }
1829
  }
1830
 
1831
-
1832
  return apply_filters( 'dokan_store_header_adress', $formatted_address, $store_address, $short_address );
1833
  }
1834
 
@@ -1902,7 +1978,17 @@ function dokan_set_is_home_false_on_store() {
1902
  }
1903
  }
1904
 
1905
- register_sidebar( array( 'name' => __( 'Dokan Store Sidebar', 'dokan-lite' ), 'id' => 'sidebar-store' ) );
 
 
 
 
 
 
 
 
 
 
1906
 
1907
  /**
1908
  * Calculate category wise commission for given product
@@ -2022,7 +2108,7 @@ function dokan_cache_reset_order_data_on_status( $order_id, $from_status, $to_st
2022
  * Reset cache group related to seller products
2023
  */
2024
  function dokan_cache_clear_seller_product_data( $product_id, $post_data = array() ) {
2025
- $seller_id = get_current_user_id();
2026
 
2027
  dokan_cache_clear_group( 'dokan_seller_product_data_' . $seller_id );
2028
  delete_transient( 'dokan-store-category-' . $seller_id );
@@ -2056,7 +2142,7 @@ function dokan_get_earning_by_product( $product_id, $seller_id ) {
2056
  $product = wc_get_product( $product_id );
2057
  $percentage = dokan_get_seller_percentage( $seller_id, $product_id );
2058
  $price = $product->get_price();
2059
- $earning = ( $price * $percentage ) / 100;
2060
 
2061
  return wc_format_decimal( $earning );
2062
  }
@@ -2118,3 +2204,75 @@ function dokan_get_vendor( $vendor_id = null ) {
2118
  return new Dokan_Vendor( $vendor_id );
2119
  }
2120
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26
  return apply_filters( 'dokan_menu_capability', 'manage_options' );
27
  }
28
 
29
+ /**
30
+ * Dokan Get current user id
31
+ *
32
+ * @since 2.7.3
33
+ *
34
+ * @return void
35
+ */
36
+ function dokan_get_current_user_id() {
37
+ if ( current_user_can( 'vendor_staff' ) ) {
38
+ $staff_id = get_current_user_id();
39
+ $vendor_id = get_user_meta( $staff_id, '_vendor_id', true );
40
+
41
+ if ( empty( $vendor_id ) ) {
42
+ return $user_id;
43
+ }
44
+
45
+ return $vendor_id;
46
+ }
47
+
48
+ return get_current_user_id();
49
+ }
50
+
51
  /**
52
  * Check if a user is seller
53
  *
92
  $author = get_post_field( 'post_author', $product_id );
93
  }
94
 
95
+ if ( $author == dokan_get_current_user_id() ) {
96
  return true;
97
  }
98
 
155
  * @param string $redirect
156
  */
157
  function dokan_redirect_if_not_seller( $redirect = '' ) {
158
+ if ( !dokan_is_user_seller( dokan_get_current_user_id() ) ) {
159
  $redirect = empty( $redirect ) ? home_url( '/' ) : $redirect;
160
 
161
  wp_redirect( $redirect );
188
  }
189
 
190
  wp_delete_post( $product_id );
191
+ do_action( 'dokan_product_deleted', $product_id );
192
 
193
  $redirect = apply_filters( 'dokan_add_new_product_redirect', dokan_get_navigation_url( 'products' ), '' );
194
 
421
  */
422
  function dokan_get_seller_percentage( $seller_id = 0, $product_id = 0 ) {
423
 
424
+ $global_percentage = dokan_get_option( 'admin_percentage', 'dokan_selling' , 0 );
425
+ $commission_val = (float) ( 100 - $global_percentage );
426
+
427
+ //product wise percentage
428
  if ( $product_id ) {
429
  $_per_product_commission = get_post_meta( $product_id, '_per_product_admin_commission', true );
430
  if ( $_per_product_commission != '' ) {
431
+ $commission_val = (float) ( 100 - $_per_product_commission );
432
  }
433
  $category_commission = dokan_get_category_wise_seller_commission( $product_id );
434
  if ( !empty( $category_commission ) ) {
435
+ $commission_val = (float) $category_commission;
436
  }
437
  }
438
 
439
+ //seller wise percentage
440
  if ( $seller_id ) {
441
  $admin_commission = get_user_meta( $seller_id, 'dokan_admin_percentage', true );
442
  if ( $admin_commission != '' ) {
443
+ $commission_val = (float) ( 100 - $admin_commission );
444
  }
445
  }
446
 
447
+ return apply_filters( 'dokan_get_seller_percentage' , $commission_val, $seller_id, $product_id );
 
448
  }
449
 
450
  endif;
711
  function dokan_posted_input( $key, $array = false ) {
712
 
713
  //If array value is submitted return array
714
+ if ( $array && isset( $_POST[$key] ) ) { // WPCS: CSRF ok.
715
+ return $_POST[$key]; // WPCS: CSRF ok.
716
  }
717
 
718
+ $value = isset( $_POST[$key] ) ? trim( $_POST[$key] ) : ''; // WPCS: CSRF ok.
719
  return esc_attr( $value );
720
  }
721
 
726
  * @return string
727
  */
728
  function dokan_posted_textarea( $key ) {
729
+ $value = isset( $_POST[$key] ) ? trim( $_POST[$key] ) : ''; // WPCS: CSRF ok.
730
 
731
  return esc_textarea( $value );
732
  }
1023
  * @return array
1024
  */
1025
  function dokan_media_uploader_restrict( $args ) {
1026
+
1027
  // bail out for admin and editor
1028
  if ( current_user_can( 'delete_pages' ) ) {
1029
  return $args;
1030
  }
1031
 
1032
  if ( current_user_can( 'dokandar' ) ) {
1033
+ $args['author'] = dokan_get_current_user_id();
1034
 
1035
  return $args;
1036
  }
1300
  if ( $current_user->ID !== 0 ) {
1301
  $role = reset( $current_user->roles );
1302
 
1303
+ if ( dokan_get_option( 'admin_access', 'dokan_general' ) == 'on' ) {
1304
+ if ( in_array( $role, array( 'seller', 'customer', 'vendor_staff' ) ) ) {
1305
+ return false;
1306
+ }
1307
  }
1308
  }
1309
 
1312
 
1313
  add_filter( 'show_admin_bar', 'dokan_disable_admin_bar' );
1314
 
1315
+ /**
1316
+ * Filter the orders, products and booking products of current user
1317
+ *
1318
+ * @param object $query
1319
+ * @since 2.7.3
1320
+ * @return object $query
1321
+ */
1322
+ function dokan_filter_orders_for_current_vendor( $query ) {
1323
+ if ( current_user_can( 'manage_woocommerce' ) ) {
1324
+ return;
1325
+ }
1326
+
1327
+ if ( ! isset( $query->query_vars['post_type'] ) ) {
1328
+ return;
1329
+ }
1330
+
1331
+ if ( is_admin() && $query->is_main_query() && ( $query->query_vars['post_type'] == 'shop_order' || $query->query_vars['post_type'] == 'product' || $query->query_vars['post_type'] == 'wc_booking' ) ) {
1332
+ $query->set( 'author', get_current_user_id() );
1333
+ }
1334
+
1335
+ return $query;
1336
+ }
1337
+
1338
+ add_action( 'pre_get_posts', 'dokan_filter_orders_for_current_vendor' );
1339
+
1340
+ /**
1341
+ * Remove sellerdiv metabox when a seller can access the backend
1342
+ *
1343
+ * @since 2.7.8
1344
+ * @return void
1345
+ */
1346
+ function dokan_remove_sellerdiv_metabox() {
1347
+ if ( current_user_can( 'manage_woocommerce' ) ) {
1348
+ return;
1349
+ }
1350
+
1351
+ if ( is_admin() && get_post_type() == 'product' && ! defined( 'DOING_AJAX' ) ) {
1352
+ remove_meta_box( 'sellerdiv', 'product', 'normal' );
1353
+ }
1354
+ }
1355
+
1356
+ add_action( 'do_meta_boxes', 'dokan_remove_sellerdiv_metabox' );
1357
+
1358
  /**
1359
  * Human readable number format.
1360
  *
1392
  }
1393
 
1394
  /**
1395
+ * Filter `get_avatar_url` to retrieve image url from dokan profile settings
1396
+ * called by `get_avatar_url()` as well as `get_avatar()`
1397
  *
1398
+ * @since 2.7.0
1399
  *
1400
+ * @param string $url avatar url
1401
+ * @param mixed $id_or_email userdata or user_id or user_email
1402
+ * @param array $args arguments
1403
+ * @return string maybe modified url
 
 
1404
  */
1405
+ function dokan_get_avatar_url( $url, $id_or_email, $args ) {
1406
 
1407
  if ( is_numeric( $id_or_email ) ) {
1408
  $user = get_user_by( 'id', $id_or_email );
1410
  if ( $id_or_email->user_id != '0' ) {
1411
  $user = get_user_by( 'id', $id_or_email->user_id );
1412
  } else {
1413
+ return $url;
1414
  }
1415
  } else {
1416
  $user = get_user_by( 'email', $id_or_email );
1417
  }
1418
 
1419
+ if ( ! $user ) {
1420
+ return $url;
1421
  }
1422
 
1423
  // see if there is a user_avatar meta field
1424
  $user_avatar = get_user_meta( $user->ID, 'dokan_profile_settings', true );
1425
  $gravatar_id = isset( $user_avatar['gravatar'] ) ? $user_avatar['gravatar'] : 0;
1426
+
1427
  if ( empty( $gravatar_id ) ) {
1428
+ return $url;
1429
  }
1430
 
1431
+ $dokan_avatar_url = wp_get_attachment_thumb_url( $gravatar_id );
1432
+
1433
+ if( empty( $dokan_avatar_url ) ) {
1434
+ return $url;
1435
+ }
1436
 
1437
+ return esc_url( $dokan_avatar_url );
1438
  }
1439
 
1440
+ add_filter( 'get_avatar_url', 'dokan_get_avatar_url', 99, 3 );
1441
 
1442
  /**
1443
  * Get navigation url for the dokan dashboard
1624
  $date = isset( $_GET['date'] ) ? (int) $_GET['date'] : 0;
1625
  ?>
1626
  <select name="date" id="filter-by-date" class="dokan-form-control">
1627
+ <option<?php selected( $date, 0 ); ?> value="0"><?php _e( 'All dates', 'dokan-lite' ); ?></option>
1628
  <?php
1629
  foreach ( $months as $arc_row ) {
1630
  if ( 0 == $arc_row->year )
1637
  selected( $date, $year . $month, false ),
1638
  esc_attr( $year . $month ),
1639
  /* translators: 1: month name, 2: 4-digit year */
1640
+ sprintf( __( '%1$s %2$d', 'dokan-lite' ), $wp_locale->get_month( $month ), $year )
1641
  );
1642
  }
1643
  ?>
1783
  )
1784
  );
1785
 
1786
+ $profile_info = dokan_get_store_info( dokan_get_current_user_id() );
1787
 
1788
  dokan_get_template_part( 'settings/address-form', '', array(
1789
  'disabled' => $disabled,
1805
  function dokan_get_seller_address( $seller_id = '', $get_array = false ) {
1806
 
1807
  if ( $seller_id == '' ) {
1808
+ $seller_id = dokan_get_current_user_id();
1809
  }
1810
 
1811
  $profile_info = dokan_get_store_info( $seller_id );
1871
  */
1872
  function dokan_get_seller_short_address( $store_id, $line_break = true ) {
1873
  $store_address = dokan_get_seller_address( $store_id, true );
1874
+ $address_classes = array(
1875
+ 'street_1',
1876
+ 'street_2',
1877
+ 'city',
1878
+ 'state',
1879
+ 'country',
1880
+ );
1881
  $short_address = array();
1882
  $formatted_address = '';
1883
 
1884
  if ( ! empty( $store_address['street_1'] ) && empty( $store_address['street_2'] ) ) {
1885
+ $short_address[] = "<span class='{$address_classes[0]}'> {$store_address['street_1']},</span>";
1886
  } else if ( empty( $store_address['street_1'] ) && ! empty( $store_address['street_2'] ) ) {
1887
+ $short_address[] = "<span class='{$address_classes[1]}'> {$store_address['street_2']},</span>";
1888
  } else if ( ! empty( $store_address['street_1'] ) && ! empty( $store_address['street_2'] ) ) {
1889
+ $short_address[] = "<span class='{$address_classes[0]}'> {$store_address['street_1']},</span>";
1890
  }
1891
 
1892
  if ( ! empty( $store_address['city'] ) && ! empty( $store_address['city'] ) ) {
1893
+ $short_address[] = "<span class='{$address_classes[2]}'> {$store_address['city']},</span>";
1894
  }
1895
 
1896
  if ( ! empty( $store_address['state'] ) && ! empty( $store_address['country'] ) ) {
1897
+ $short_address[] = "<span class='{$address_classes[3]}'> {$store_address['state']},</span>" . "<span class='{$address_classes[4]}'> {$store_address['country']} </span>";
1898
  } else if ( ! empty( $store_address['country'] ) ) {
1899
+ $short_address[] = "<span class='{$address_classes[4]}'> {$store_address['country']} </span>";
1900
  }
1901
 
1902
  if ( ! empty( $short_address ) && $line_break ) {
1903
  $formatted_address = implode( '<br>', $short_address );
1904
  } else {
1905
+ $formatted_address = implode( ' ', $short_address );
 
 
 
 
1906
  }
1907
 
 
1908
  return apply_filters( 'dokan_store_header_adress', $formatted_address, $store_address, $short_address );
1909
  }
1910
 
1978
  }
1979
  }
1980
 
1981
+ register_sidebar(
1982
+ apply_filters( 'dokan_store_widget_args', array(
1983
+ 'name' => __( 'Dokan Store Sidebar', 'dokan-lite' ),
1984
+ 'id' => 'sidebar-store',
1985
+ 'before_widget' => '<aside class="widget">',
1986
+ 'after_widget' => '</aside>',
1987
+ 'before_title' => '<h3 class="widget-title">',
1988
+ 'after_title' => '</h3>',
1989
+ )
1990
+ )
1991
+ );
1992
 
1993
  /**
1994
  * Calculate category wise commission for given product
2108
  * Reset cache group related to seller products
2109
  */
2110
  function dokan_cache_clear_seller_product_data( $product_id, $post_data = array() ) {
2111
+ $seller_id = dokan_get_current_user_id();
2112
 
2113
  dokan_cache_clear_group( 'dokan_seller_product_data_' . $seller_id );
2114
  delete_transient( 'dokan-store-category-' . $seller_id );
2142
  $product = wc_get_product( $product_id );
2143
  $percentage = dokan_get_seller_percentage( $seller_id, $product_id );
2144
  $price = $product->get_price();
2145
+ $earning = ( (float)$price * $percentage ) / 100;
2146
 
2147
  return wc_format_decimal( $earning );
2148
  }
2204
  return new Dokan_Vendor( $vendor_id );
2205
  }
2206
 
2207
+ /**
2208
+ * Get all cap related to seller
2209
+ *
2210
+ * @since 2.7.3
2211
+ *
2212
+ * @return array
2213
+ */
2214
+ function dokan_get_all_caps() {
2215
+ $capabilities = array(
2216
+ 'overview' => array(
2217
+ 'dokan_view_sales_overview',
2218
+ 'dokan_view_sales_report_chart',
2219
+ 'dokan_view_announcement',
2220
+ 'dokan_view_order_report',
2221
+ 'dokan_view_review_reports',
2222
+ 'dokan_view_product_status_report',
2223
+ ),
2224
+ 'report' => array(
2225
+ 'dokan_view_overview_report',
2226
+ 'dokan_view_daily_sale_report',
2227
+ 'dokan_view_top_selling_report',
2228
+ 'dokan_view_top_earning_report',
2229
+ 'dokan_view_statement_report',
2230
+ ),
2231
+ 'order' => array(
2232
+ 'dokan_view_order',
2233
+ 'dokan_manage_order',
2234
+ 'dokan_manage_order_note',
2235
+ 'dokan_manage_refund',
2236
+ ),
2237
+
2238
+ 'coupon' => array(
2239
+ 'dokan_add_coupon',
2240
+ 'dokan_edit_coupon',
2241
+ 'dokan_delete_coupon',
2242
+ ),
2243
+ 'review' => array(
2244
+ 'dokan_view_reviews',
2245
+ 'dokan_manage_reviews',
2246
+ ),
2247
+
2248
+ 'withdraw' => array(
2249
+ 'dokan_manage_withdraw',
2250
+ ),
2251
+ 'product' => array(
2252
+ 'dokan_add_product',
2253
+ 'dokan_edit_product',
2254
+ 'dokan_delete_product',
2255
+ 'dokan_view_product',
2256
+ 'dokan_duplicate_product',
2257
+ 'dokan_import_product',
2258
+ 'dokan_export_product',
2259
+ ),
2260
+ 'menu' => array(
2261
+ 'dokan_view_overview_menu',
2262
+ 'dokan_view_product_menu',
2263
+ 'dokan_view_order_menu',
2264
+ 'dokan_view_coupon_menu',
2265
+ 'dokan_view_report_menu',
2266
+ 'dokan_view_review_menu',
2267
+ 'dokan_view_withdraw_menu',
2268
+ 'dokan_view_store_settings_menu',
2269
+ 'dokan_view_store_payment_menu',
2270
+ 'dokan_view_store_shipping_menu',
2271
+ 'dokan_view_store_social_menu',
2272
+ 'dokan_view_store_seo_menu',
2273
+ )
2274
+ );
2275
+
2276
+ return apply_filters( 'dokan_get_all_cap', $capabilities );
2277
+ }
2278
+
includes/order-functions.php CHANGED
@@ -90,17 +90,25 @@ function dokan_get_seller_orders( $seller_id, $status = 'all', $order_date = NUL
90
  function dokan_get_seller_orders_by_date( $start_date, $end_date, $seller_id = false, $status = 'all' ) {
91
  global $wpdb;
92
 
93
- $seller_id = ! $seller_id ? get_current_user_id() : intval( $seller_id );
94
 
95
- $end_date = date( 'Y-m-d 00:00:00', strtotime( $end_date ) );
96
- $end_date = date( 'Y-m-d h:i:s', strtotime( $end_date . '-1 minute' ) );
97
- $start_date = date( 'Y-m-d', strtotime( $start_date ) );
 
 
 
 
98
 
99
- $cache_group = 'dokan_seller_data_'.$seller_id;
100
- $cache_key = md5( 'dokan-seller-orders-' . $end_date . '-' . $end_date. '-' . $seller_id );
101
- $orders = wp_cache_get( $cache_key, $cache_group );
102
  if ( $orders === false ) {
103
- $status_where = ( $status == 'all' ) ? '' : $wpdb->prepare( ' AND order_status = %s', $status );
 
 
 
 
 
 
 
104
  $date_query = $wpdb->prepare( ' AND DATE( p.post_date ) >= %s AND DATE( p.post_date ) <= %s', $start_date, $end_date );
105
  $sql = "SELECT do.*, p.post_date
106
  FROM {$wpdb->prefix}dokan_orders AS do
@@ -112,6 +120,7 @@ function dokan_get_seller_orders_by_date( $start_date, $end_date, $seller_id = f
112
  $status_where
113
  GROUP BY do.order_id
114
  ORDER BY p.post_date ASC";
 
115
  $orders = $wpdb->get_results( $wpdb->prepare( $sql, $seller_id ) );
116
 
117
  wp_cache_set( $cache_key, $orders, $cache_group, 3600*2 );
@@ -133,7 +142,7 @@ function dokan_get_seller_orders_by_date( $start_date, $end_date, $seller_id = f
133
  function dokan_get_seller_withdraw_by_date( $start_date, $end_date, $seller_id = false ) {
134
  global $wpdb;
135
 
136
- $seller_id = ! $seller_id ? get_current_user_id() : intval( $seller_id );
137
  $withdraw_status_where = $wpdb->prepare( ' AND status = %d', 1 );
138
  $withdraw_date_query = $wpdb->prepare( ' AND DATE( date ) >= %s AND DATE( date ) <= %s', $start_date, $end_date );
139
 
@@ -308,15 +317,13 @@ function dokan_on_child_order_status_change( $order_id, $old_status, $new_status
308
  $parent_order_id = $order_post->post_parent;
309
  $sub_orders = get_children( array( 'post_parent' => $parent_order_id, 'post_type' => 'shop_order' ) );
310
 
311
-
312
  // return if any child order is not completed
313
  $all_complete = true;
314
 
315
  if ( $sub_orders ) {
316
  foreach ($sub_orders as $sub) {
317
  $order = new WC_Order( $sub->ID );
318
-
319
- if ( dokan_get_prop( $order, 'status' ) != 'wc-completed' ) {
320
  $all_complete = false;
321
  }
322
  }
@@ -376,7 +383,7 @@ function dokan_sync_insert_order( $order_id ) {
376
  $seller_id = dokan_get_seller_id_by_order( $order_id );
377
  $order_total = $order->get_total();
378
  $order_status = dokan_get_prop( $order, 'status' );
379
- $admin_commission = dokan_get_admin_commission_by( $order, $seller_id );
380
  $net_amount = $order_total - $admin_commission;
381
  $net_amount = apply_filters( 'dokan_order_net_amount', $net_amount, $order );
382
 
@@ -731,6 +738,12 @@ function dokan_get_admin_commission_by( $order, $seller_id ) {
731
  return;
732
  }
733
 
 
 
 
 
 
 
734
  $admin_commission = 0;
735
  $refund_t = 0;
736
  $commissions = array();
@@ -802,3 +815,22 @@ if ( ! function_exists( 'dokan_get_customer_orders_by_seller' ) ) :
802
  }
803
 
804
  endif;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
90
  function dokan_get_seller_orders_by_date( $start_date, $end_date, $seller_id = false, $status = 'all' ) {
91
  global $wpdb;
92
 
93
+ $seller_id = ! $seller_id ? dokan_get_current_user_id() : intval( $seller_id );
94
 
95
+ $end_date = date( 'Y-m-d 00:00:00', strtotime( $end_date ) );
96
+ $end_date = date( 'Y-m-d h:i:s', strtotime( $end_date . '-1 minute' ) );
97
+ $start_date = date( 'Y-m-d', strtotime( $start_date ) );
98
+
99
+ $cache_group = 'dokan_seller_data_' . $seller_id;
100
+ $cache_key = md5( 'dokan-seller-orders-' . $end_date . '-' . $end_date. '-' . $seller_id );
101
+ $orders = wp_cache_get( $cache_key, $cache_group );
102
 
 
 
 
103
  if ( $orders === false ) {
104
+ $status_where = '';
105
+
106
+ if ( is_array( $status ) ) {
107
+ $status_where = sprintf( " AND order_status IN ('%s')", implode( "', '", $status ) );
108
+ } else {
109
+ $status_where = $wpdb->prepare( ' AND order_status = %s', $status );
110
+ }
111
+
112
  $date_query = $wpdb->prepare( ' AND DATE( p.post_date ) >= %s AND DATE( p.post_date ) <= %s', $start_date, $end_date );
113
  $sql = "SELECT do.*, p.post_date
114
  FROM {$wpdb->prefix}dokan_orders AS do
120
  $status_where
121
  GROUP BY do.order_id
122
  ORDER BY p.post_date ASC";
123
+
124
  $orders = $wpdb->get_results( $wpdb->prepare( $sql, $seller_id ) );
125
 
126
  wp_cache_set( $cache_key, $orders, $cache_group, 3600*2 );
142
  function dokan_get_seller_withdraw_by_date( $start_date, $end_date, $seller_id = false ) {
143
  global $wpdb;
144
 
145
+ $seller_id = ! $seller_id ? dokan_get_current_user_id() : intval( $seller_id );
146
  $withdraw_status_where = $wpdb->prepare( ' AND status = %d', 1 );
147
  $withdraw_date_query = $wpdb->prepare( ' AND DATE( date ) >= %s AND DATE( date ) <= %s', $start_date, $end_date );
148
 
317
  $parent_order_id = $order_post->post_parent;
318
  $sub_orders = get_children( array( 'post_parent' => $parent_order_id, 'post_type' => 'shop_order' ) );
319
 
 
320
  // return if any child order is not completed
321
  $all_complete = true;
322
 
323
  if ( $sub_orders ) {
324
  foreach ($sub_orders as $sub) {
325
  $order = new WC_Order( $sub->ID );
326
+ if ( dokan_get_prop( $order, 'status' ) != 'completed' ) {
 
327
  $all_complete = false;
328
  }
329
  }
383
  $seller_id = dokan_get_seller_id_by_order( $order_id );
384
  $order_total = $order->get_total();
385
  $order_status = dokan_get_prop( $order, 'status' );
386
+ $admin_commission = dokan_get_admin_commission_by( $order, $seller_id );
387
  $net_amount = $order_total - $admin_commission;
388
  $net_amount = apply_filters( 'dokan_order_net_amount', $net_amount, $order );
389
 
738
  return;
739
  }
740
 
741
+ $saved_admin_fee = get_post_meta( dokan_get_prop( $order, 'id' ), '_dokan_admin_fee', true );
742
+
743
+ if ( $saved_admin_fee != '' ) {
744
+ return apply_filters( 'dokan_order_admin_commission', $saved_admin_fee, $order );
745
+ }
746
+
747
  $admin_commission = 0;
748
  $refund_t = 0;
749
  $commissions = array();
815
  }
816
 
817
  endif;
818
+
819
+ add_action( 'dokan_checkout_update_order_meta', 'dokan_save_admin_commssion_to_order_meta', 10, 2 );
820
+
821
+ /**
822
+ * Update order meta when the order is placed
823
+ *
824
+ * @since 2.7.8
825
+ *
826
+ * @param int $order_id
827
+ *
828
+ * @param int $seller_id
829
+ *
830
+ * @return void
831
+ */
832
+ function dokan_save_admin_commssion_to_order_meta( $order_id, $seller_id ) {
833
+ $seller_order = wc_get_order( $order_id );
834
+ $admin_fee = dokan_get_admin_commission_by( $seller_order, $seller_id );
835
+ update_post_meta( $order_id , '_dokan_admin_fee', $admin_fee );
836
+ }
includes/product-functions.php CHANGED
@@ -430,6 +430,66 @@ function dokan_products_array_filter_editable( $product ) {
430
  return $product && is_a( $product, 'WC_Product' ) && current_user_can( 'dokandar', $product->get_id() );
431
  }
432
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
433
 
434
 
435
 
430
  return $product && is_a( $product, 'WC_Product' ) && current_user_can( 'dokandar', $product->get_id() );
431
  }
432
 
433
+ /**
434
+ * Get row action for product
435
+ *
436
+ * @since 2.7.3
437
+ *
438
+ * @param object $post
439
+ *
440
+ * @return array
441
+ */
442
+ function dokan_product_get_row_action( $post ) {
443
+
444
+ if ( empty( $post->ID ) ) {
445
+ return $row_action;
446
+ }
447
+
448
+ $row_action = array();
449
+ $row_action_html = array();
450
+ $product_id = $post->ID;
451
+
452
+ if ( current_user_can( 'dokan_edit_product' ) ) {
453
+ $row_action['edit'] = array(
454
+ 'title' => __( 'Edit', 'dokan-lite' ),
455
+ 'url' => dokan_edit_product_url( $product_id ),
456
+ 'class' => 'edit',
457
+ );
458
+ }
459
+
460
+ if ( current_user_can( 'dokan_delete_product' ) ) {
461
+ $row_action['delete'] = array(
462
+ 'title' => __( 'Delete Permanently', 'dokan-lite' ),
463
+ 'url' => wp_nonce_url( add_query_arg( array( 'action' => 'dokan-delete-product', 'product_id' => $product_id ), dokan_get_navigation_url('products') ), 'dokan-delete-product' ),
464
+ 'class' => 'delete',
465
+ 'other' => 'onclick="return confirm( \'Are you sure?\' );"'
466
+ );
467
+ }
468
+
469
+ if ( current_user_can( 'dokan_view_product' ) && $post->post_status != 'pending' ) {
470
+ $row_action['view'] = array(
471
+ 'title' => __( 'View', 'dokan-lite' ),
472
+ 'url' => get_permalink( $product_id ),
473
+ 'class' => 'view',
474
+ );
475
+ }
476
+
477
+ $row_action = apply_filters( 'dokan_product_row_actions', $row_action, $post );
478
+
479
+ if ( empty( $row_action ) ) {
480
+ return $row_action;
481
+ }
482
+
483
+ foreach ( $row_action as $key => $action ) {
484
+ $row_action_html[$key] = sprintf( '<span class="%s"><a href="%s" %s>%s</a></span>', $action['class'], esc_url( $action['url'] ), isset( $action['other'] ) ? $action['other'] : '', $action['title'] );
485
+ }
486
+
487
+ $row_action_html = apply_filters( 'dokan_product_row_action_html', $row_action_html, $post );
488
+
489
+ return implode( ' | ', $row_action_html );
490
+ }
491
+
492
+
493
 
494
 
495
 
includes/reports.php CHANGED
@@ -15,7 +15,9 @@
15
  * @return obj
16
  */
17
  function dokan_get_order_report_data( $args = array(), $start_date, $end_date ) {
18
- global $wpdb, $current_user;
 
 
19
 
20
  $defaults = array(
21
  'data' => array(),
@@ -110,7 +112,7 @@ function dokan_get_order_report_data( $args = array(), $start_date, $end_date )
110
  $query['where'] = "
111
  WHERE posts.post_type = 'shop_order'
112
  AND posts.post_status != 'trash'
113
- AND do.seller_id = {$current_user->ID}
114
  AND do.order_status IN ('" . implode( "','", apply_filters( 'woocommerce_reports_order_statuses', array( 'wc-completed', 'wc-processing', 'wc-on-hold' ) ) ) . "')
115
  ";
116
 
15
  * @return obj
16
  */
17
  function dokan_get_order_report_data( $args = array(), $start_date, $end_date ) {
18
+ global $wpdb;
19
+
20
+ $current_user = dokan_get_current_user_id();
21
 
22
  $defaults = array(
23
  'data' => array(),
112
  $query['where'] = "
113
  WHERE posts.post_type = 'shop_order'
114
  AND posts.post_status != 'trash'
115
+ AND do.seller_id = {$current_user}
116
  AND do.order_status IN ('" . implode( "','", apply_filters( 'woocommerce_reports_order_statuses', array( 'wc-completed', 'wc-processing', 'wc-on-hold' ) ) ) . "')
117
  ";
118
 
includes/template-tags.php CHANGED
@@ -150,7 +150,7 @@ function dokan_product_dashboard_errors() {
150
  function dokan_product_listing_status_filter() {
151
  $permalink = dokan_get_navigation_url( 'products' );
152
  $status_class = isset( $_GET['post_status'] ) ? $_GET['post_status'] : 'all';
153
- $post_counts = dokan_count_posts( 'product', get_current_user_id() );
154
  $statuses = dokan_get_post_status();
155
 
156
  dokan_get_template_part( 'products/listing-status-filter', '', array(
@@ -165,7 +165,7 @@ function dokan_order_listing_status_filter() {
165
  $orders_url = dokan_get_navigation_url( 'orders' );
166
 
167
  $status_class = isset( $_GET['order_status'] ) ? $_GET['order_status'] : 'all';
168
- $orders_counts = dokan_count_orders( get_current_user_id() );
169
  $order_date = ( isset( $_GET['order_date'] ) ) ? $_GET['order_date'] : '';
170
  $date_filter = array();
171
  $all_order_url = array();
@@ -299,29 +299,33 @@ function dokan_get_dashboard_nav() {
299
 
300
  $urls = array(
301
  'dashboard' => array(
302
- 'title' => __( 'Dashboard', 'dokan-lite'),
303
- 'icon' => '<i class="fa fa-tachometer"></i>',
304
- 'url' => dokan_get_navigation_url(),
305
- 'pos' => 10
 
306
  ),
307
  'products' => array(
308
- 'title' => __( 'Products', 'dokan-lite'),
309
- 'icon' => '<i class="fa fa-briefcase"></i>',
310
- 'url' => dokan_get_navigation_url( 'products' ),
311
- 'pos' => 30
 
312
  ),
313
  'orders' => array(
314
- 'title' => __( 'Orders', 'dokan-lite'),
315
- 'icon' => '<i class="fa fa-shopping-cart"></i>',
316
- 'url' => dokan_get_navigation_url( 'orders' ),
317
- 'pos' => 50
 
318
  ),
319
 
320
  'withdraw' => array(
321
- 'title' => __( 'Withdraw', 'dokan-lite'),
322
- 'icon' => '<i class="fa fa-upload"></i>',
323
- 'url' => dokan_get_navigation_url( 'withdraw' ),
324
- 'pos' => 70
 
325
  ),
326
  );
327
 
@@ -340,16 +344,18 @@ function dokan_get_dashboard_nav() {
340
  'pos' => 10
341
  ),
342
  'store' => array(
343
- 'title' => __( 'Store', 'dokan-lite'),
344
- 'icon' => '<i class="fa fa-university"></i>',
345
- 'url' => dokan_get_navigation_url( 'settings/store' ),
346
- 'pos' => 30
 
347
  ),
348
  'payment' => array(
349
- 'title' => __( 'Payment', 'dokan-lite'),
350
- 'icon' => '<i class="fa fa-credit-card"></i>',
351
- 'url' => dokan_get_navigation_url( 'settings/payment' ),
352
- 'pos' => 50
 
353
  )
354
  );
355
 
@@ -361,17 +367,35 @@ function dokan_get_dashboard_nav() {
361
  *
362
  * @param array.
363
  */
364
- $settings['sub'] = apply_filters( 'dokan_get_dashboard_settings_nav', $settings_sub );
 
 
 
 
 
365
 
 
 
366
 
367
  uasort( $settings['sub'], 'dokan_nav_sort_by_pos' );
368
 
369
- $urls['settings'] = $settings;
 
 
 
 
 
 
 
 
370
 
371
  $nav_urls = apply_filters( 'dokan_get_dashboard_nav', $urls );
372
 
373
  uasort( $nav_urls, 'dokan_nav_sort_by_pos' );
374
 
 
 
 
375
  /**
376
  * Filter to get the final seller dashboard navigation.
377
  *
@@ -382,6 +406,21 @@ function dokan_get_dashboard_nav() {
382
  return $nav_urls;
383
  }
384
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
385
  /**
386
  * Renders the Dokan dashboard menu
387
  *
@@ -399,7 +438,11 @@ function dokan_dashboard_nav( $active_menu = '' ) {
399
  $nav_menu = dokan_get_dashboard_nav();
400
  $active_menu_parts = explode( '/', $active_menu );
401
 
402
- if ( isset( $active_menu_parts[1] ) && $active_menu_parts[0] == 'settings' && array_key_exists( $active_menu_parts[1], $nav_menu['settings']['sub'] ) ) {
 
 
 
 
403
  $urls = $nav_menu['settings']['sub'];
404
  $active_menu = $active_menu_parts[1];
405
  } else {
@@ -408,13 +451,13 @@ function dokan_dashboard_nav( $active_menu = '' ) {
408
 
409
  $menu = '<ul class="dokan-dashboard-menu">';
410
 
411
- foreach ($urls as $key => $item) {
412
  $class = ( $active_menu == $key ) ? 'active ' . $key : $key;
413
  $menu .= sprintf( '<li class="%s"><a href="%s">%s %s</a></li>', $class, $item['url'], $item['icon'], $item['title'] );
414
  }
415
 
416
  $common_links = '<li class="dokan-common-links dokan-clearfix">
417
- <a title="' . __( 'Visit Store', 'dokan-lite' ) . '" class="tips" data-placement="top" href="' . dokan_get_store_url( get_current_user_id()) .'" target="_blank"><i class="fa fa-external-link"></i></a>
418
  <a title="' . __( 'Edit Account', 'dokan-lite' ) . '" class="tips" data-placement="top" href="' . dokan_get_navigation_url( 'edit-account' ) . '"><i class="fa fa-user"></i></a>
419
  <a title="' . __( 'Log out', 'dokan-lite' ) . '" class="tips" data-placement="top" href="' . wp_logout_url( home_url() ) . '"><i class="fa fa-power-off"></i></a>
420
  </li>';
@@ -495,7 +538,7 @@ add_action( 'delete_post', 'dokan_store_category_delete_transient' );
495
  add_action( 'save_post', 'dokan_store_category_delete_transient' );
496
 
497
  function dokan_seller_reg_form_fields() {
498
- $postdata = $_POST;
499
  $role = isset( $postdata['role'] ) ? $postdata['role'] : 'customer';
500
  $role_style = ( $role == 'customer' ) ? ' style="display:none"' : '';
501
 
150
  function dokan_product_listing_status_filter() {
151
  $permalink = dokan_get_navigation_url( 'products' );
152
  $status_class = isset( $_GET['post_status'] ) ? $_GET['post_status'] : 'all';
153
+ $post_counts = dokan_count_posts( 'product', dokan_get_current_user_id() );
154
  $statuses = dokan_get_post_status();
155
 
156
  dokan_get_template_part( 'products/listing-status-filter', '', array(
165
  $orders_url = dokan_get_navigation_url( 'orders' );
166
 
167
  $status_class = isset( $_GET['order_status'] ) ? $_GET['order_status'] : 'all';
168
+ $orders_counts = dokan_count_orders( dokan_get_current_user_id() );
169
  $order_date = ( isset( $_GET['order_date'] ) ) ? $_GET['order_date'] : '';
170
  $date_filter = array();
171
  $all_order_url = array();
299
 
300
  $urls = array(
301
  'dashboard' => array(
302
+ 'title' => __( 'Dashboard', 'dokan-lite'),
303
+ 'icon' => '<i class="fa fa-tachometer"></i>',
304
+ 'url' => dokan_get_navigation_url(),
305
+ 'pos' => 10,
306
+ 'permission' => 'dokan_view_overview_menu'
307
  ),
308
  'products' => array(
309
+ 'title' => __( 'Products', 'dokan-lite'),
310
+ 'icon' => '<i class="fa fa-briefcase"></i>',
311
+ 'url' => dokan_get_navigation_url( 'products' ),
312
+ 'pos' => 30,
313
+ 'permission' => 'dokan_view_product_menu'
314
  ),
315
  'orders' => array(
316
+ 'title' => __( 'Orders', 'dokan-lite'),
317
+ 'icon' => '<i class="fa fa-shopping-cart"></i>',
318
+ 'url' => dokan_get_navigation_url( 'orders' ),
319
+ 'pos' => 50,
320
+ 'permission' => 'dokan_view_order_menu'
321
  ),
322
 
323
  'withdraw' => array(
324
+ 'title' => __( 'Withdraw', 'dokan-lite'),
325
+ 'icon' => '<i class="fa fa-upload"></i>',
326
+ 'url' => dokan_get_navigation_url( 'withdraw' ),
327
+ 'pos' => 70,
328
+ 'permission' => 'dokan_view_withdraw_menu'
329
  ),
330
  );
331
 
344
  'pos' => 10
345
  ),
346
  'store' => array(
347
+ 'title' => __( 'Store', 'dokan-lite'),
348
+ 'icon' => '<i class="fa fa-university"></i>',
349
+ 'url' => dokan_get_navigation_url( 'settings/store' ),
350
+ 'pos' => 30,
351
+ 'permission' => 'dokan_view_store_settings_menu'
352
  ),
353
  'payment' => array(
354
+ 'title' => __( 'Payment', 'dokan-lite'),
355
+ 'icon' => '<i class="fa fa-credit-card"></i>',
356
+ 'url' => dokan_get_navigation_url( 'settings/payment' ),
357
+ 'pos' => 50,
358
+ 'permission' => 'dokan_view_store_payment_menu'
359
  )
360
  );
361
 
367
  *
368
  * @param array.
369
  */
370
+ $sub_settings = apply_filters( 'dokan_get_dashboard_settings_nav', $settings_sub );
371
+
372
+ foreach ( $sub_settings as $key => $sub_setting ) {
373
+ if ( ! isset( $sub_setting['pos'] ) && empty( $sub_setting['pos'] ) ) {
374
+ $sub_setting['pos'] = '200';
375
+ }
376
 
377
+ $settings['sub'][$key] = $sub_setting;
378
+ }
379
 
380
  uasort( $settings['sub'], 'dokan_nav_sort_by_pos' );
381
 
382
+ // Filter Sub setting menu according to permission
383
+ $settings['sub'] = array_filter( $settings['sub'], 'dokan_check_menu_permission' );
384
+
385
+ // Manage main settings url after re-render permission cheching
386
+ if ( count( $settings['sub'] ) > 1 ) {
387
+ $urls['settings'] = $settings;
388
+ $sub_settings_key = array_keys( $settings['sub'] );
389
+ $urls['settings']['url'] = $settings['sub'][$sub_settings_key[1]]['url'];
390
+ }
391
 
392
  $nav_urls = apply_filters( 'dokan_get_dashboard_nav', $urls );
393
 
394
  uasort( $nav_urls, 'dokan_nav_sort_by_pos' );
395
 
396
+ // Filter main menu according to permission
397
+ $nav_urls = array_filter( $nav_urls, 'dokan_check_menu_permission' );
398
+
399
  /**
400
  * Filter to get the final seller dashboard navigation.
401
  *
406
  return $nav_urls;
407
  }
408
 
409
+ /**
410
+ * Checking menu permissions
411
+ *
412
+ * @since 2.7.3
413
+ *
414
+ * @return boolean
415
+ */
416
+ function dokan_check_menu_permission( $menu ) {
417
+ if ( isset( $menu['permission'] ) && !current_user_can( $menu['permission'] ) ) {
418
+ return false;
419
+ }
420
+
421
+ return true;
422
+ }
423
+
424
  /**
425
  * Renders the Dokan dashboard menu
426
  *
438
  $nav_menu = dokan_get_dashboard_nav();
439
  $active_menu_parts = explode( '/', $active_menu );
440
 
441
+ if ( isset( $active_menu_parts[1] )
442
+ && $active_menu_parts[0] == 'settings'
443
+ && isset( $nav_menu['settings']['sub'] )
444
+ && array_key_exists( $active_menu_parts[1], $nav_menu['settings']['sub'] )
445
+ ) {
446
  $urls = $nav_menu['settings']['sub'];
447
  $active_menu = $active_menu_parts[1];
448
  } else {
451
 
452
  $menu = '<ul class="dokan-dashboard-menu">';
453
 
454
+ foreach ( $urls as $key => $item ) {
455
  $class = ( $active_menu == $key ) ? 'active ' . $key : $key;
456
  $menu .= sprintf( '<li class="%s"><a href="%s">%s %s</a></li>', $class, $item['url'], $item['icon'], $item['title'] );
457
  }
458
 
459
  $common_links = '<li class="dokan-common-links dokan-clearfix">
460
+ <a title="' . __( 'Visit Store', 'dokan-lite' ) . '" class="tips" data-placement="top" href="' . dokan_get_store_url( dokan_get_current_user_id() ) .'" target="_blank"><i class="fa fa-external-link"></i></a>
461
  <a title="' . __( 'Edit Account', 'dokan-lite' ) . '" class="tips" data-placement="top" href="' . dokan_get_navigation_url( 'edit-account' ) . '"><i class="fa fa-user"></i></a>
462
  <a title="' . __( 'Log out', 'dokan-lite' ) . '" class="tips" data-placement="top" href="' . wp_logout_url( home_url() ) . '"><i class="fa fa-power-off"></i></a>
463
  </li>';
538
  add_action( 'save_post', 'dokan_store_category_delete_transient' );
539
 
540
  function dokan_seller_reg_form_fields() {
541
+ $postdata = wc_clean( $_POST ); // WPCS: CSRF ok, input var ok.
542
  $role = isset( $postdata['role'] ) ? $postdata['role'] : 'customer';
543
  $role_style = ( $role == 'customer' ) ? ' style="display:none"' : '';
544
 
includes/upgrades/dokan-upgrade-2.7.3.php ADDED
@@ -0,0 +1,82 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Save admin fee as meta for existing sub-orders
4
+ */
5
+ function dokan_update_order_meta_273(){
6
+ $args = array(
7
+ 'post_type' => 'shop_order',
8
+ 'posts_per_page' => -1,
9
+ 'post_status' => 'any',
10
+ 'meta_query' => array(
11
+ array(
12
+ 'key' => 'has_sub_order',
13
+ 'compare' => 'NOT EXISTS',
14
+ ),
15
+ array(
16
+ 'key' => '_dokan_admin_fee',
17
+ 'compare' => 'NOT EXISTS',
18
+ ),
19
+ )
20
+ );
21
+
22
+ $query = new WP_Query( $args );
23
+
24
+ foreach ( $query->posts as $sub_order ) {
25
+ $order = wc_get_order( $sub_order->ID );
26
+ $admin_fee = dokan_get_admin_commission_by( $order, dokan_get_seller_id_by_order( $sub_order->ID ) );
27
+ update_post_meta( $sub_order->ID , '_dokan_admin_fee', $admin_fee );
28
+ }
29
+ }
30
+
31
+ /**
32
+ * Modify column structure to support upto 4 decimals
33
+ */
34
+ function dokan_update_table_structure_273(){
35
+ global $wpdb;
36
+
37
+ $wpdb->query(
38
+ "ALTER TABLE `{$wpdb->prefix}dokan_orders`
39
+ MODIFY COLUMN order_total float(11,4)"
40
+ );
41
+
42
+ $wpdb->query(
43
+ "ALTER TABLE `{$wpdb->prefix}dokan_orders`
44
+ MODIFY COLUMN net_amount float(11,4)"
45
+ );
46
+
47
+ }
48
+
49
+ /**
50
+ * Update seller capabilities
51
+ *
52
+ * @since 2.7.3
53
+ *
54
+ * @return void
55
+ */
56
+ function dokan_update_user_capabilities_273() {
57
+ global $wp_roles;
58
+
59
+ if ( class_exists( 'WP_Roles' ) && ! isset( $wp_roles ) ) {
60
+ $wp_roles = new WP_Roles();
61
+ }
62
+
63
+ $capabilities = array();
64
+ $all_cap = dokan_get_all_caps();
65
+
66
+ foreach( $all_cap as $key=>$cap ) {
67
+ $capabilities = array_merge( $capabilities, $cap );
68
+ }
69
+
70
+ foreach ( $capabilities as $key => $capability ) {
71
+ $wp_roles->add_cap( 'seller', $capability );
72
+ $wp_roles->add_cap( 'administrator', $capability );
73
+ $wp_roles->add_cap( 'shop_manager', $capability );
74
+ }
75
+ }
76
+
77
+
78
+ dokan_update_table_structure_273();
79
+ dokan_update_order_meta_273();
80
+ dokan_update_user_capabilities_273();
81
+
82
+
includes/upgrades/dokan-upgrade-2.7.6.php ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Modify ip column to support the max possible length of IPv6
4
+ */
5
+ function dokan_update_table_structure_276(){
6
+ global $wpdb;
7
+
8
+ $wpdb->query(
9
+ "ALTER TABLE `{$wpdb->prefix}dokan_withdraw`
10
+ MODIFY COLUMN ip varchar(50) NOT NULL"
11
+ );
12
+ }
13
+
14
+ function dokan_update_user_capabilities_276() {
15
+ global $wp_roles;
16
+
17
+ if ( class_exists( 'WP_Roles' ) && ! isset( $wp_roles ) ) {
18
+ $wp_roles = new WP_Roles();
19
+ }
20
+
21
+ $caps = array(
22
+ 'publish_posts' => true,
23
+ 'edit_posts' => true,
24
+ 'delete_published_posts' => true,
25
+ 'edit_published_posts' => true,
26
+ 'delete_posts' => true,
27
+ 'manage_categories' => true,
28
+ 'moderate_comments' => true,
29
+ 'unfiltered_html' => true,
30
+ 'upload_files' => true,
31
+ 'edit_shop_orders' => true,
32
+ 'edit_product' => true,
33
+ 'read_product' => true,
34
+ 'delete_product' => true,
35
+ 'edit_products' => true,
36
+ 'publish_products' => true,
37
+ 'read_private_products' => true,
38
+ 'delete_products' => true,
39
+ 'delete_products' => true,
40
+ 'delete_private_products' => true,
41
+ 'delete_published_products' => true,
42
+ 'delete_published_products' => true,
43
+ 'edit_private_products' => true,
44
+ 'edit_published_products' => true,
45
+ 'manage_product_terms' => true,
46
+ 'delete_product_terms' => true,
47
+ 'assign_product_terms' => true,
48
+ );
49
+
50
+ foreach ( $caps as $cap => $val ) {
51
+ error_log( print_r( $cap, true ) );
52
+ $wp_roles->add_cap( 'seller', $cap );
53
+ }
54
+
55
+ }
56
+
57
+
58
+ dokan_update_table_structure_276();
59
+ dokan_update_user_capabilities_276();
includes/wc-crud-functions.php CHANGED
@@ -57,7 +57,12 @@ function dokan_create_sub_order( $parent_order_id ) {
57
  if ( count( $sellers ) == 1 ) {
58
  $temp = array_keys( $sellers );
59
  $seller_id = reset( $temp );
 
60
  wp_update_post( array( 'ID' => $parent_order_id, 'post_author' => $seller_id ) );
 
 
 
 
61
  return;
62
  }
63
 
@@ -147,13 +152,14 @@ function dokan_create_seller_order( $parent_order, $seller_id, $seller_products
147
  $shipping_tax = $shipping_values['tax'];
148
 
149
  // do tax
 
 
150
  foreach( $parent_order->get_items( array( 'tax' ) ) as $tax ) {
151
  $item_id = wc_add_order_item( $order_id, array(
152
  'order_item_name' => $tax->get_name(),
153
  'order_item_type' => 'tax'
154
  ) );
155
 
156
- $seller_order = wc_get_order( $order_id );
157
  $seller_shipping = $seller_order->get_items( 'shipping' );
158
  $seller_shipping = reset( $seller_shipping );
159
 
@@ -162,7 +168,7 @@ function dokan_create_seller_order( $parent_order, $seller_id, $seller_products
162
  'label' => $tax->get_label(),
163
  'compound' => $tax->get_compound(),
164
  'tax_amount' => wc_format_decimal( array_sum( $items_tax[$tax->get_rate_id()] ) ),
165
- 'shipping_tax_amount' => $seller_shipping->get_total_tax()
166
  );
167
 
168
  foreach( $tax_metas as $meta_key => $meta_value ) {
@@ -195,7 +201,7 @@ function dokan_create_seller_order( $parent_order, $seller_id, $seller_products
195
  update_post_meta( $order_id, '_prices_include_tax', $parent_order->get_prices_include_tax() );
196
  update_post_meta( $order_id, '_customer_ip_address', get_post_meta( $parent_order->get_id(), '_customer_ip_address', true ) );
197
  update_post_meta( $order_id, '_customer_user_agent', get_post_meta( $parent_order->get_id(), '_customer_user_agent', true ) );
198
-
199
  do_action( 'dokan_checkout_update_order_meta', $order_id, $seller_id );
200
  } // if order
201
  }
57
  if ( count( $sellers ) == 1 ) {
58
  $temp = array_keys( $sellers );
59
  $seller_id = reset( $temp );
60
+
61
  wp_update_post( array( 'ID' => $parent_order_id, 'post_author' => $seller_id ) );
62
+
63
+ $admin_fee = dokan_get_admin_commission_by( $parent_order, $seller_id );
64
+
65
+ update_post_meta( $parent_order_id , '_dokan_admin_fee', $admin_fee );
66
  return;
67
  }
68
 
152
  $shipping_tax = $shipping_values['tax'];
153
 
154
  // do tax
155
+ $seller_order = wc_get_order( $order_id );
156
+
157
  foreach( $parent_order->get_items( array( 'tax' ) ) as $tax ) {
158
  $item_id = wc_add_order_item( $order_id, array(
159
  'order_item_name' => $tax->get_name(),
160
  'order_item_type' => 'tax'
161
  ) );
162
 
 
163
  $seller_shipping = $seller_order->get_items( 'shipping' );
164
  $seller_shipping = reset( $seller_shipping );
165
 
168
  'label' => $tax->get_label(),
169
  'compound' => $tax->get_compound(),
170
  'tax_amount' => wc_format_decimal( array_sum( $items_tax[$tax->get_rate_id()] ) ),
171
+ 'shipping_tax_amount' => is_bool( $seller_shipping ) ? '' : $seller_shipping->get_total_tax()
172
  );
173
 
174
  foreach( $tax_metas as $meta_key => $meta_value ) {
201
  update_post_meta( $order_id, '_prices_include_tax', $parent_order->get_prices_include_tax() );
202
  update_post_meta( $order_id, '_customer_ip_address', get_post_meta( $parent_order->get_id(), '_customer_ip_address', true ) );
203
  update_post_meta( $order_id, '_customer_user_agent', get_post_meta( $parent_order->get_id(), '_customer_user_agent', true ) );
204
+
205
  do_action( 'dokan_checkout_update_order_meta', $order_id, $seller_id );
206
  } // if order
207
  }
includes/wc-functions.php CHANGED
@@ -123,18 +123,29 @@ function dokan_process_product_meta( $post_id ) {
123
 
124
  if ( $is_taxonomy ) {
125
 
126
- $values_are_slugs = false;
127
-
128
  if ( isset( $attribute_values[ $i ] ) ) {
129
 
130
  // Select based attributes - Format values (posted values are slugs)
131
  if ( is_array( $attribute_values[ $i ] ) ) {
132
- $values = array_map( 'sanitize_title', $attribute_values[ $i ] );
133
- $values_are_slugs = true;
134
 
135
- // Text based attributes - Posted values are term names - don't change to slugs
136
  } else {
137
- $values = array_map( 'stripslashes', array_map( 'strip_tags', explode( WC_DELIMITER, $attribute_values[ $i ] ) ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
138
  }
139
 
140
  // Remove empty items in the array
@@ -146,34 +157,21 @@ function dokan_process_product_meta( $post_id ) {
146
 
147
  // Update post terms
148
  if ( taxonomy_exists( $attribute_names[ $i ] ) ) {
149
-
150
- foreach ( $values as $key => $value ) {
151
- $term = get_term_by( $values_are_slugs ? 'slug' : 'name', trim( $value ), $attribute_names[ $i ] );
152
-
153
- if ( $term ) {
154
- $values[ $key ] = intval( $term->term_id );
155
- } else {
156
- $term = wp_insert_term( trim( $value ), $attribute_names[ $i ] );
157
- if ( isset( $term->term_id ) ) {
158
- $values[ $key ] = intval( $term->term_id );
159
- }
160
- }
161
- }
162
-
163
  wp_set_object_terms( $post_id, $values, $attribute_names[ $i ] );
164
  }
165
 
166
  if ( ! empty( $values ) ) {
167
  // Add attribute to array, but don't set values
168
  $attributes[ sanitize_title( $attribute_names[ $i ] ) ] = array(
169
- 'name' => wc_clean( $attribute_names[ $i ] ),
170
- 'value' => '',
171
- 'position' => $attribute_position[ $i ],
172
- 'is_visible' => $is_visible,
173
- 'is_variation' => $is_variation,
174
- 'is_taxonomy' => $is_taxonomy,
175
  );
176
  }
 
177
  } elseif ( isset( $attribute_values[ $i ] ) ) {
178
 
179
  // Text based, possibly separated by pipes (WC_DELIMITER). Preserve line breaks in non-variation attributes.
@@ -181,14 +179,15 @@ function dokan_process_product_meta( $post_id ) {
181
 
182
  // Custom attribute - Add attribute to array and set the values
183
  $attributes[ sanitize_title( $attribute_names[ $i ] ) ] = array(
184
- 'name' => wc_clean( $attribute_names[ $i ] ),
185
- 'value' => $values,
186
- 'position' => $attribute_position[ $i ],
187
- 'is_visible' => $is_visible,
188
- 'is_variation' => $is_variation,
189
- 'is_taxonomy' => $is_taxonomy,
190
  );
191
  }
 
192
  }
193
  }
194
  uasort( $attributes, 'wc_product_attribute_uasort_comparison' );
@@ -511,7 +510,7 @@ function dokan_new_customer_data( $data ) {
511
  if ( $role == 'seller' ) {
512
  $data['first_name'] = strip_tags( $_POST['fname'] );
513
  $data['last_name'] = strip_tags( $_POST['lname'] );
514
- $data['user_nicename'] = sanitize_title( $_POST['shopurl'] );
515
  }
516
 
517
  return $data;
@@ -562,8 +561,8 @@ add_action( 'woocommerce_created_customer', 'dokan_on_create_seller', 10, 2);
562
  */
563
  function dokan_seller_displayname ( $display_name ) {
564
 
565
- if ( dokan_is_user_seller ( get_current_user_id() ) && !is_admin() ) {
566
- $seller_info = dokan_get_store_info ( get_current_user_id() );
567
  $display_name = ( !empty( $seller_info['store_name'] ) ) ? $seller_info['store_name'] : $display_name;
568
 
569
  }
@@ -876,103 +875,103 @@ function dokan_filter_woocommerce_dashboard_status_widget_sales_query( $query )
876
  */
877
  function dokan_save_account_details(){
878
 
879
- if ( 'POST' !== strtoupper( $_SERVER[ 'REQUEST_METHOD' ] ) ) {
880
- return;
881
- }
882
-
883
- if ( empty( $_POST[ 'action' ] ) || 'dokan_save_account_details' !== $_POST[ 'action' ] || empty( $_POST['_wpnonce'] ) || ! wp_verify_nonce( $_POST['_wpnonce'], 'dokan_save_account_details' ) ) {
884
- return;
885
- }
886
-
887
- $errors = new WP_Error();
888
- $user = new stdClass();
889
-
890
- $user->ID = (int) get_current_user_id();
891
- $current_user = get_user_by( 'id', $user->ID );
892
-
893
- if ( $user->ID <= 0 ) {
894
- return;
895
- }
896
-
897
- $account_first_name = ! empty( $_POST[ 'account_first_name' ] ) ? wc_clean( $_POST[ 'account_first_name' ] ) : '';
898
- $account_last_name = ! empty( $_POST[ 'account_last_name' ] ) ? wc_clean( $_POST[ 'account_last_name' ] ) : '';
899
- $account_email = ! empty( $_POST[ 'account_email' ] ) ? sanitize_email( $_POST[ 'account_email' ] ) : '';
900
- $pass_cur = ! empty( $_POST[ 'password_current' ] ) ? $_POST[ 'password_current' ] : '';
901
- $pass1 = ! empty( $_POST[ 'password_1' ] ) ? $_POST[ 'password_1' ] : '';
902
- $pass2 = ! empty( $_POST[ 'password_2' ] ) ? $_POST[ 'password_2' ] : '';
903
- $save_pass = true;
904
-
905
- $user->first_name = $account_first_name;
906
- $user->last_name = $account_last_name;
907
-
908
- // Prevent emails being displayed, or leave alone.
909
- $user->display_name = is_email( $current_user->display_name ) ? $user->first_name : $current_user->display_name;
910
-
911
- // Handle required fields
912
- $required_fields = apply_filters( 'woocommerce_save_account_details_required_fields', array(
913
- 'account_first_name' => __( 'First Name', 'dokan-lite' ),
914
- 'account_last_name' => __( 'Last Name', 'dokan-lite' ),
915
- 'account_email' => __( 'Email address', 'dokan-lite' ),
916
- ) );
917
-
918
- foreach ( $required_fields as $field_key => $field_name ) {
919
- if ( empty( $_POST[ $field_key ] ) ) {
920
- wc_add_notice( '<strong>' . esc_html( $field_name ) . '</strong> ' . __( 'is a required field.', 'dokan-lite' ), 'error' );
921
- }
922
- }
923
-
924
- if ( $account_email ) {
925
- if ( ! is_email( $account_email ) ) {
926
- wc_add_notice( __( 'Please provide a valid email address.', 'dokan-lite' ), 'error' );
927
- } elseif ( email_exists( $account_email ) && $account_email !== $current_user->user_email ) {
928
- wc_add_notice( __( 'This email address is already registered.', 'dokan-lite' ), 'error' );
929
- }
930
- $user->user_email = $account_email;
931
- }
932
-
933
- if ( ! empty( $pass1 ) && ! wp_check_password( $pass_cur, $current_user->user_pass, $current_user->ID ) ) {
934
- wc_add_notice( __( 'Your current password is incorrect.', 'dokan-lite' ), 'error' );
935
- $save_pass = false;
936
- }
937
-
938
- if ( ! empty( $pass_cur ) && empty( $pass1 ) && empty( $pass2 ) ) {
939
- wc_add_notice( __( 'Please fill out all password fields.', 'dokan-lite' ), 'error' );
940
- $save_pass = false;
941
- } elseif ( ! empty( $pass1 ) && empty( $pass_cur ) ) {
942
- wc_add_notice( __( 'Please enter your current password.', 'dokan-lite' ), 'error' );
943
- $save_pass = false;
944
- } elseif ( ! empty( $pass1 ) && empty( $pass2 ) ) {
945
- wc_add_notice( __( 'Please re-enter your password.', 'dokan-lite' ), 'error' );
946
- $save_pass = false;
947
- } elseif ( ( ! empty( $pass1 ) || ! empty( $pass2 ) ) && $pass1 !== $pass2 ) {
948
- wc_add_notice( __( 'New passwords do not match.', 'dokan-lite' ), 'error' );
949
- $save_pass = false;
950
- }
951
-
952
- if ( $pass1 && $save_pass ) {
953
- $user->user_pass = $pass1;
954
- }
955
-
956
- // Allow plugins to return their own errors.
957
- do_action_ref_array( 'woocommerce_save_account_details_errors', array( &$errors, &$user ) );
958
-
959
- if ( $errors->get_error_messages() ) {
960
- foreach ( $errors->get_error_messages() as $error ) {
961
- wc_add_notice( $error, 'error' );
962
- }
963
- }
964
-
965
- if ( wc_notice_count( 'error' ) === 0 ) {
966
-
967
- wp_update_user( $user ) ;
968
-
969
- wc_add_notice( __( 'Account details changed successfully.', 'dokan-lite' ) );
970
-
971
- do_action( 'woocommerce_save_account_details', $user->ID );
972
-
973
- wp_safe_redirect( dokan_get_navigation_url( ' edit-account' ) );
974
- exit;
975
- }
976
  }
977
 
978
  add_action( 'template_redirect', 'dokan_save_account_details' );
@@ -1017,3 +1016,26 @@ if ( ! function_exists( 'dokan_date_time_format' ) ) {
1017
  }
1018
 
1019
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
123
 
124
  if ( $is_taxonomy ) {
125
 
 
 
126
  if ( isset( $attribute_values[ $i ] ) ) {
127
 
128
  // Select based attributes - Format values (posted values are slugs)
129
  if ( is_array( $attribute_values[ $i ] ) ) {
130
+ $values = array_map( 'wc_clean', $attribute_values[ $i ] );
 
131
 
132
+ // Text based attributes - Posted values are term names, wp_set_object_terms wants ids or slugs.
133
  } else {
134
+ $values = array();
135
+ $raw_values = array_map( 'wc_sanitize_term_text_based', explode( WC_DELIMITER, $attribute_values[ $i ] ) );
136
+
137
+ foreach ( $raw_values as $value ) {
138
+ $term = get_term_by( 'name', $value, $attribute_names[ $i ] );
139
+ if ( ! $term ) {
140
+ $term = wp_insert_term( $value, $attribute_names[ $i ] );
141
+
142
+ if ( $term && ! is_wp_error( $term ) ) {
143
+ $values[] = $term['term_id'];
144
+ }
145
+ } else {
146
+ $values[] = $term->term_id;
147
+ }
148
+ }
149
  }
150
 
151
  // Remove empty items in the array
157
 
158
  // Update post terms
159
  if ( taxonomy_exists( $attribute_names[ $i ] ) ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
160
  wp_set_object_terms( $post_id, $values, $attribute_names[ $i ] );
161
  }
162
 
163
  if ( ! empty( $values ) ) {
164
  // Add attribute to array, but don't set values
165
  $attributes[ sanitize_title( $attribute_names[ $i ] ) ] = array(
166
+ 'name' => wc_clean( $attribute_names[ $i ] ),
167
+ 'value' => '',
168
+ 'position' => $attribute_position[ $i ],
169
+ 'is_visible' => $is_visible,
170
+ 'is_variation' => $is_variation,
171
+ 'is_taxonomy' => $is_taxonomy
172
  );
173
  }
174
+
175
  } elseif ( isset( $attribute_values[ $i ] ) ) {
176
 
177
  // Text based, possibly separated by pipes (WC_DELIMITER). Preserve line breaks in non-variation attributes.
179
 
180
  // Custom attribute - Add attribute to array and set the values
181
  $attributes[ sanitize_title( $attribute_names[ $i ] ) ] = array(
182
+ 'name' => wc_clean( $attribute_names[ $i ] ),
183
+ 'value' => $values,
184
+ 'position' => $attribute_position[ $i ],
185
+ 'is_visible' => $is_visible,
186
+ 'is_variation' => $is_variation,
187
+ 'is_taxonomy' => $is_taxonomy
188
  );
189
  }
190
+
191
  }
192
  }
193
  uasort( $attributes, 'wc_product_attribute_uasort_comparison' );
510
  if ( $role == 'seller' ) {
511
  $data['first_name'] = strip_tags( $_POST['fname'] );
512
  $data['last_name'] = strip_tags( $_POST['lname'] );
513
+ $data['user_nicename'] = sanitize_user( $_POST['shopurl'] );
514
  }
515
 
516
  return $data;
561
  */
562
  function dokan_seller_displayname ( $display_name ) {
563
 
564
+ if ( current_user_can( 'seller' ) && !is_admin() ) {
565
+ $seller_info = dokan_get_store_info ( dokan_get_current_user_id() );
566
  $display_name = ( !empty( $seller_info['store_name'] ) ) ? $seller_info['store_name'] : $display_name;
567
 
568
  }
875
  */
876
  function dokan_save_account_details(){
877
 
878
+ if ( 'POST' !== strtoupper( $_SERVER['REQUEST_METHOD'] ) ) {
879
+ return;
880
+ }
881
+
882
+ if ( empty( $_POST['_wpnonce'] ) || !wp_verify_nonce( $_POST['_wpnonce'], 'dokan_save_account_details' ) ) {
883
+ return;
884
+ }
885
+
886
+ $errors = new WP_Error();
887
+ $user = new stdClass();
888
+
889
+ $user->ID = (int) get_current_user_id();
890
+ $current_user = get_user_by( 'id', $user->ID );
891
+
892
+ if ( $user->ID <= 0 ) {
893
+ return;
894
+ }
895
+
896
+ $account_first_name = !empty( $_POST['account_first_name'] ) ? wc_clean( $_POST['account_first_name'] ) : '';
897
+ $account_last_name = !empty( $_POST['account_last_name'] ) ? wc_clean( $_POST['account_last_name'] ) : '';
898
+ $account_email = !empty( $_POST['account_email'] ) ? sanitize_email( $_POST['account_email'] ) : '';
899
+ $pass_cur = !empty( $_POST['password_current'] ) ? $_POST['password_current'] : '';
900
+ $pass1 = !empty( $_POST['password_1'] ) ? $_POST['password_1'] : '';
901
+ $pass2 = !empty( $_POST['password_2'] ) ? $_POST['password_2'] : '';
902
+ $save_pass = true;
903
+
904
+ $user->first_name = $account_first_name;
905
+ $user->last_name = $account_last_name;
906
+
907
+ // Prevent emails being displayed, or leave alone.
908
+ $user->display_name = is_email( $current_user->display_name ) ? $user->first_name : $current_user->display_name;
909
+
910
+ // Handle required fields
911
+ $required_fields = apply_filters( 'woocommerce_save_account_details_required_fields', array(
912
+ 'account_first_name' => __( 'First Name', 'dokan-lite' ),
913
+ 'account_last_name' => __( 'Last Name', 'dokan-lite' ),
914
+ 'account_email' => __( 'Email address', 'dokan-lite' ),
915
+ ) );
916
+
917
+ foreach ( $required_fields as $field_key => $field_name ) {
918
+ if ( empty( $_POST[$field_key] ) ) {
919
+ wc_add_notice( '<strong>' . esc_html( $field_name ) . '</strong> ' . __( 'is a required field.', 'dokan-lite' ), 'error' );
920
+ }
921
+ }
922
+
923
+ if ( $account_email ) {
924
+ if ( !is_email( $account_email ) ) {
925
+ wc_add_notice( __( 'Please provide a valid email address.', 'dokan-lite' ), 'error' );
926
+ } elseif ( email_exists( $account_email ) && $account_email !== $current_user->user_email ) {
927
+ wc_add_notice( __( 'This email address is already registered.', 'dokan-lite' ), 'error' );
928
+ }
929
+ $user->user_email = $account_email;
930
+ }
931
+
932
+ if ( !empty( $pass1 ) && !wp_check_password( $pass_cur, $current_user->user_pass, $current_user->ID ) ) {
933
+ wc_add_notice( __( 'Your current password is incorrect.', 'dokan-lite' ), 'error' );
934
+ $save_pass = false;
935
+ }
936
+
937
+ if ( !empty( $pass_cur ) && empty( $pass1 ) && empty( $pass2 ) ) {
938
+ wc_add_notice( __( 'Please fill out all password fields.', 'dokan-lite' ), 'error' );
939
+ $save_pass = false;
940
+ } elseif ( !empty( $pass1 ) && empty( $pass_cur ) ) {
941
+ wc_add_notice( __( 'Please enter your current password.', 'dokan-lite' ), 'error' );
942
+ $save_pass = false;
943
+ } elseif ( !empty( $pass1 ) && empty( $pass2 ) ) {
944
+ wc_add_notice( __( 'Please re-enter your password.', 'dokan-lite' ), 'error' );
945
+ $save_pass = false;
946
+ } elseif ( (!empty( $pass1 ) || !empty( $pass2 ) ) && $pass1 !== $pass2 ) {
947
+ wc_add_notice( __( 'New passwords do not match.', 'dokan-lite' ), 'error' );
948
+ $save_pass = false;
949
+ }
950
+
951
+ if ( $pass1 && $save_pass ) {
952
+ $user->user_pass = $pass1;
953
+ }
954
+
955
+ // Allow plugins to return their own errors.
956
+ do_action_ref_array( 'woocommerce_save_account_details_errors', array( &$errors, &$user ) );
957
+
958
+ if ( $errors->get_error_messages() ) {
959
+ foreach ( $errors->get_error_messages() as $error ) {
960
+ wc_add_notice( $error, 'error' );
961
+ }
962
+ }
963
+
964
+ if ( wc_notice_count( 'error' ) === 0 ) {
965
+
966
+ wp_update_user( $user );
967
+
968
+ wc_add_notice( __( 'Account details changed successfully.', 'dokan-lite' ) );
969
+
970
+ do_action( 'woocommerce_save_account_details', $user->ID );
971
+
972
+ wp_safe_redirect( dokan_get_navigation_url( ' edit-account' ) );
973
+ exit;
974
+ }
975
  }
976
 
977
  add_action( 'template_redirect', 'dokan_save_account_details' );
1016
  }
1017
 
1018
  }
1019
+
1020
+ /**
1021
+ * Remove banner when without banner layout
1022
+ * selected for profile
1023
+ *
1024
+ * @param array $progress_values
1025
+ *
1026
+ * @return array
1027
+ */
1028
+ function dokan_split_profile_completion_value( $progress_values ) {
1029
+ $store_banner = dokan_get_option( 'store_header_template', 'dokan_appearance' );
1030
+
1031
+ if ( 'layout3' == $store_banner ) {
1032
+ unset( $progress_values['banner_val'] );
1033
+ $progress_values['store_name_val'] = 15;
1034
+ $progress_values['phone_val'] = 15;
1035
+ $progress_values['address_val'] = 15;
1036
+ }
1037
+
1038
+ return $progress_values;
1039
+ }
1040
+
1041
+ add_filter( 'dokan_profile_completion_values', 'dokan_split_profile_completion_value', 10 );
includes/wc-template.php CHANGED
@@ -124,3 +124,76 @@ function dokan_manage_capability_for_woocommerce_product( $capability ) {
124
 
125
  add_filter( 'woocommerce_register_post_type_product', 'dokan_manage_capability_for_woocommerce_product' );
126
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
124
 
125
  add_filter( 'woocommerce_register_post_type_product', 'dokan_manage_capability_for_woocommerce_product' );
126
 
127
+ /**
128
+ * Author field for product quick edit
129
+ *
130
+ * @return void
131
+ */
132
+ function dokan_author_field_quick_edit(){
133
+ $admin_user = get_user_by( 'id', get_current_user_id() );
134
+ $user_query = new WP_User_Query( array( 'role' => 'seller' ) );
135
+ $sellers = $user_query->get_results();
136
+ ?>
137
+ <div class="dokan-product-author-field">
138
+ <label class="alignleft">
139
+ <span class="title"><?php _e( 'Vendor', 'dokan-lite' ); ?></span>
140
+ <span class="input-text-wrap">
141
+ <select name="dokan_product_author_override" id="dokan_product_author_override" class="">
142
+ <?php if ( ! $sellers ): ?>
143
+ <option value="<?php echo $admin_user->ID ?>"><?php echo $admin_user->display_name; ?></option>
144
+ <?php else: ?>
145
+ <option value="<?php echo $admin_user->ID; ?>"><?php echo $admin_user->display_name; ?></option>
146
+ <?php foreach ( $sellers as $key => $user): ?>
147
+ <option value="<?php echo $user->ID ?>"><?php echo $user->display_name; ?></option>
148
+ <?php endforeach ?>
149
+ <?php endif ?>
150
+ </select>
151
+ </span>
152
+ </label>
153
+ </div>
154
+ <?php
155
+ }
156
+
157
+ add_action( 'woocommerce_product_quick_edit_end', 'dokan_author_field_quick_edit' );
158
+
159
+ /**
160
+ * Assign value for quick edit data
161
+ *
162
+ * @param array $column
163
+ * @param integer $post_id
164
+ *
165
+ * @return void
166
+ */
167
+ function dokan_vendor_quick_edit_data( $column,$post_id ) {
168
+ switch ( $column ) {
169
+ case 'name' :
170
+ ?>
171
+ <div class="hidden dokan_vendor_id_inline" id="dokan_vendor_id_inline_<?php echo $post_id; ?>">
172
+ <div id="dokan_vendor_id"><?php echo get_post_field( 'post_author', $post_id ); ?></div>
173
+ </div>
174
+ <?php
175
+ break;
176
+ default :
177
+ break;
178
+ }
179
+ }
180
+
181
+ add_action( 'manage_product_posts_custom_column', 'dokan_vendor_quick_edit_data', 99, 2 );
182
+
183
+ /**
184
+ * Save quick edit data
185
+ *
186
+ * @param object $product
187
+ *
188
+ * @return void
189
+ */
190
+ function dokan_save_quick_edit_vendor_data ( $product ){
191
+ if ( isset( $_REQUEST['dokan_product_author_override'] ) ) {
192
+ $vendor_id = esc_attr( $_REQUEST['dokan_product_author_override'] );
193
+ wp_update_post( array( 'ID' => $product->get_id(), 'post_author' => $vendor_id ) );
194
+ }
195
+ }
196
+
197
+ add_action( 'woocommerce_product_quick_edit_save', 'dokan_save_quick_edit_vendor_data', 10, 1 );
198
+
199
+
includes/widgets/store-contact.php CHANGED
@@ -29,28 +29,38 @@ class Dokan_Store_Contact_Form extends WP_Widget {
29
  **/
30
  function widget( $args, $instance ) {
31
 
32
- if ( ! dokan_is_store_page() ) {
33
- return;
34
- }
35
 
36
- extract( $args, EXTR_SKIP );
 
 
 
37
 
38
- $title = apply_filters( 'widget_title', $instance['title'] );
39
- $seller_id = (int) get_query_var( 'author' );
40
- $store_info = dokan_get_store_info( $seller_id );
41
 
42
- echo $before_widget;
 
 
43
 
44
- if ( ! empty( $title ) ) {
45
- echo $args['before_title'] . $title . $args['after_title'];
46
- }
47
 
48
- dokan_get_template_part( 'widgets/store-contact-form', '', array(
49
- 'seller_id' => $seller_id,
50
- 'store_info' => $store_info,
51
- ) );
52
 
53
- echo $after_widget;
 
 
 
 
 
 
 
 
 
 
54
  }
55
 
56
  /**
29
  **/
30
  function widget( $args, $instance ) {
31
 
32
+ if ( dokan_is_store_page() || is_product() ) {
33
+ extract( $args, EXTR_SKIP );
34
+ $title = apply_filters( 'widget_title', $instance['title'] );
35
 
36
+ if ( is_product() ) {
37
+ global $post;
38
+ $seller_id = get_post_field( 'post_author', $post->ID );
39
+ }
40
 
41
+ if ( dokan_is_store_page() ) {
42
+ $seller_id = (int) get_query_var( 'author' );
43
+ }
44
 
45
+ if ( empty( $seller_id ) ) {
46
+ return;
47
+ }
48
 
49
+ $store_info = dokan_get_store_info( $seller_id );
 
 
50
 
51
+ echo $before_widget;
 
 
 
52
 
53
+ if ( ! empty( $title ) ) {
54
+ echo $args['before_title'] . $title . $args['after_title'];
55
+ }
56
+
57
+ dokan_get_template_part( 'widgets/store-contact-form', '', array(
58
+ 'seller_id' => $seller_id,
59
+ 'store_info' => $store_info,
60
+ ) );
61
+
62
+ echo $after_widget;
63
+ }
64
  }
65
 
66
  /**
includes/widgets/store-menu-category.php CHANGED
@@ -14,15 +14,17 @@ class Dokan_Store_Category_Walker extends Dokan_Category_Walker {
14
  $indent = str_repeat( "\t", $depth );
15
 
16
  $url = $this->store_url . 'section/' . $category->term_id;
 
 
17
 
18
  if ( $depth == 0 ) {
19
  $caret = $args['has_children'] ? ' <span class="caret-icon"><i class="fa fa-angle-right" aria-hidden="true"></i></span>' : '';
20
  $class_name = $args['has_children'] ? ' class="has-children parent-cat-wrap"' : ' class="parent-cat-wrap"';
21
- $output .= $indent . '<li' . $class_name . '>' . "\n\t" .'<a href="' . $url . '">' . $category->name . $caret . '</a>' . "\n";
22
  } else {
23
  $caret = $args['has_children'] ? ' <span class="caret-icon"><i class="fa fa-angle-right" aria-hidden="true"></i></span>' : '';
24
  $class_name = $args['has_children'] ? ' class="has-children"' : '';
25
- $output .= $indent . '<li' . $class_name . '><a href="' . $url . '">' . $category->name . $caret . '</a>';
26
  }
27
  }
28
  }
14
  $indent = str_repeat( "\t", $depth );
15
 
16
  $url = $this->store_url . 'section/' . $category->term_id;
17
+ $selected_cat = get_query_var( 'term' );
18
+ $a_selected_class = $selected_cat == $category->term_id ? 'class="selected"' : '';
19
 
20
  if ( $depth == 0 ) {
21
  $caret = $args['has_children'] ? ' <span class="caret-icon"><i class="fa fa-angle-right" aria-hidden="true"></i></span>' : '';
22
  $class_name = $args['has_children'] ? ' class="has-children parent-cat-wrap"' : ' class="parent-cat-wrap"';
23
+ $output .= $indent . '<li' . $class_name . '>' . "\n\t" .'<a href="' . $url . '"'. $a_selected_class .'>' . $category->name . $caret . '</a>' . "\n";
24
  } else {
25
  $caret = $args['has_children'] ? ' <span class="caret-icon"><i class="fa fa-angle-right" aria-hidden="true"></i></span>' : '';
26
  $class_name = $args['has_children'] ? ' class="has-children"' : '';
27
+ $output .= $indent . '<li' . $class_name . '><a href="' . $url . '"'.$a_selected_class.'>' . $category->name . $caret . '</a>';
28
  }
29
  }
30
  }
includes/widgets/store-menu.php CHANGED
@@ -36,7 +36,7 @@ class Dokan_Store_Category_Menu extends WP_Widget {
36
  $seller_id = (int) get_query_var( 'author' );
37
 
38
  dokan_store_category_menu( $seller_id, $title );
39
-
40
  ?>
41
  <script>
42
  ( function ( $ ) {
@@ -63,6 +63,15 @@ class Dokan_Store_Category_Menu extends WP_Widget {
63
  }
64
  } );
65
  } );
 
 
 
 
 
 
 
 
 
66
  } )( jQuery );
67
  </script>
68
 
36
  $seller_id = (int) get_query_var( 'author' );
37
 
38
  dokan_store_category_menu( $seller_id, $title );
39
+
40
  ?>
41
  <script>
42
  ( function ( $ ) {
63
  }
64
  } );
65
  } );
66
+
67
+ $(document).ready(function(){
68
+ var selectedLi = $('#cat-drop-stack ul').find( 'a.selected' );
69
+ selectedLi.css({ fontWeight: 'bold' });
70
+
71
+ selectedLi.parents('ul.children').each( function( i, val ) {
72
+ $( val ).css({ display: 'block' });
73
+ });
74
+ });
75
  } )( jQuery );
76
  </script>
77
 
includes/withdraw-functions.php CHANGED
@@ -49,6 +49,29 @@ function dokan_withdraw_get_active_methods() {
49
  return $methods;
50
  }
51
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
52
  /**
53
  * Get a single withdraw method based on key
54
  *
@@ -238,4 +261,4 @@ function dokan_withdraw_get_active_order_status_in_comma() {
238
  $order_status = dokan_withdraw_get_active_order_status();
239
  $status = "'" . implode("', '", $order_status ) . "'";
240
  return $status;
241
- }
49
  return $methods;
50
  }
51
 
52
+ /**
53
+ * Get active withdraw methods for seller.
54
+ * @return array
55
+ */
56
+ function dokan_get_seller_active_withdraw_methods() {
57
+ $payment_methods = get_user_meta( dokan_get_current_user_id(), 'dokan_profile_settings' );
58
+ $paypal = isset( $payment_methods[0]['payment']['paypal']['email'] ) && $payment_methods[0]['payment']['paypal']['email'] !== false ? 'paypal' : '';
59
+ $bank = isset( $payment_methods[0]['payment']['bank']['ac_number'] ) && $payment_methods[0]['payment']['bank']['ac_number'] !== '' ? 'bank' : '';
60
+ $skrill = isset( $payment_methods[0]['payment']['skrill']['email'] ) && $payment_methods[0]['payment']['skrill']['email'] !== false ? 'skrill' : '';
61
+
62
+ $payment_methods = array( $paypal, $bank, $skrill );
63
+ $active_payment_methods = array();
64
+
65
+ foreach ( $payment_methods as $payment_method ) {
66
+ if ( ! empty( $payment_method ) ) {
67
+ array_push( $active_payment_methods, $payment_method );
68
+ }
69
+ }
70
+
71
+ return apply_filters( 'dokan_get_seller_active_withdraw_methods', $active_payment_methods );
72
+ }
73
+
74
+
75
  /**
76
  * Get a single withdraw method based on key
77
  *
261
  $order_status = dokan_withdraw_get_active_order_status();
262
  $status = "'" . implode("', '", $order_status ) . "'";
263
  return $status;
264
+ }
languages/dokan-lite.pot CHANGED
@@ -1,232 +1,256 @@
1
- # Copyright (C) 2017 weDevs
2
  # This file is distributed under the GPL2.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Dokan 2.6.10\n"
6
- "Report-Msgid-Bugs-To: http://wedevs.com/support/forum/theme-support/dokan/\n"
7
- "POT-Creation-Date: 2017-11-13 05:19:22+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
- "PO-Revision-Date: 2017-MO-DA HO:MI+ZONE\n"
12
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13
  "Language-Team: LANGUAGE <EMAIL@ADDRESS>\n"
14
- "X-Generator: grunt-wp-i18n1.0.1\n"
 
 
 
 
 
 
 
 
 
 
 
15
 
16
  #: templates/products/new-product-single.php:461
17
  msgid "1"
18
  msgstr ""
19
 
20
- #: classes/admin-user-profile.php:69 classes/seller-setup-wizard.php:274
 
 
 
 
 
 
 
 
 
21
  msgid "Country"
22
  msgstr ""
23
 
24
- #: classes/admin-user-profile.php:73
25
  msgid "Select a country&hellip;"
26
  msgstr ""
27
 
28
- #: classes/admin-user-profile.php:76
29
  msgid "State/County"
30
  msgstr ""
31
 
32
- #: classes/admin-user-profile.php:77
33
  msgid "State/County or state code"
34
  msgstr ""
35
 
36
- #: classes/admin-user-profile.php:82
37
  msgid "Dokan Options"
38
  msgstr ""
39
 
40
- #: classes/admin-user-profile.php:87
41
  msgid "Banner"
42
  msgstr ""
43
 
44
- #: classes/admin-user-profile.php:99 templates/settings/store-form.php:67
45
  msgid "Upload banner"
46
  msgstr ""
47
 
48
- #: classes/admin-user-profile.php:100
49
  msgid "(Upload a banner for your store. Banner size is (825x300) pixels. )"
50
  msgstr ""
51
 
52
- #: classes/admin-user-profile.php:107
53
  msgid "Store name"
54
  msgstr ""
55
 
56
- #: classes/admin-user-profile.php:114
 
 
 
 
57
  msgid "Address 1"
58
  msgstr ""
59
 
60
- #: classes/admin-user-profile.php:121
61
  msgid "Address 2"
62
  msgstr ""
63
 
64
- #: classes/admin-user-profile.php:128
65
  msgid "Town/City"
66
  msgstr ""
67
 
68
- #: classes/admin-user-profile.php:135
69
  msgid "Zip Code"
70
  msgstr ""
71
 
72
- #: classes/admin-user-profile.php:175
73
  #: templates/global/seller-registration-form.php:38
74
  msgid "Phone Number"
75
  msgstr ""
76
 
77
- #: classes/admin-user-profile.php:193
78
  msgid "Payment Options : "
79
  msgstr ""
80
 
81
- #: classes/admin-user-profile.php:198
82
  msgid "Paypal Email "
83
  msgstr ""
84
 
85
- #: classes/admin-user-profile.php:206
86
  msgid "Skrill Email "
87
  msgstr ""
88
 
89
- #: classes/admin-user-profile.php:215
90
  msgid "Bank name "
91
  msgstr ""
92
 
93
- #: classes/admin-user-profile.php:221
94
  msgid "Account Name "
95
  msgstr ""
96
 
97
- #: classes/admin-user-profile.php:227
98
  msgid "Account Number "
99
  msgstr ""
100
 
101
- #: classes/admin-user-profile.php:233
102
  msgid "Bank Address "
103
  msgstr ""
104
 
105
- #: classes/admin-user-profile.php:239
106
  msgid "Bank Swift "
107
  msgstr ""
108
 
109
- #: classes/admin-user-profile.php:246 includes/admin/setup-wizard.php:88
110
  msgid "Selling"
111
  msgstr ""
112
 
113
- #: classes/admin-user-profile.php:251
114
  msgid "Enable Adding Products"
115
  msgstr ""
116
 
117
- #: classes/admin-user-profile.php:254
118
  msgid "Enable or disable product adding capability"
119
  msgstr ""
120
 
121
- #: classes/admin-user-profile.php:259
122
  msgid "Publishing"
123
  msgstr ""
124
 
125
- #: classes/admin-user-profile.php:264
126
  msgid "Publish product directly"
127
  msgstr ""
128
 
129
- #: classes/admin-user-profile.php:267
130
  msgid "Bypass pending, publish products directly"
131
  msgstr ""
132
 
133
- #: classes/admin-user-profile.php:272
134
  msgid "Admin Commission Type "
135
  msgstr ""
136
 
137
- #: classes/admin-user-profile.php:275 includes/admin/class-settings.php:136
138
  msgid "Percentage"
139
  msgstr ""
140
 
141
- #: classes/admin-user-profile.php:276 includes/admin/class-settings.php:135
142
  msgid "Flat"
143
  msgstr ""
144
 
145
- #: classes/admin-user-profile.php:278
146
  msgid "Set the commmission type admin gets from this seller"
147
  msgstr ""
148
 
149
- #: classes/admin-user-profile.php:282
150
  msgid "Admin Commission "
151
  msgstr ""
152
 
153
- #: classes/admin-user-profile.php:286
154
  msgid "It will override the default commission admin gets from each sales"
155
  msgstr ""
156
 
157
- #: classes/admin-user-profile.php:291
158
  msgid "Featured vendor"
159
  msgstr ""
160
 
161
- #: classes/admin-user-profile.php:296
162
  msgid "Mark as featured vendor"
163
  msgstr ""
164
 
165
- #: classes/admin-user-profile.php:299
166
  msgid "This vendor will be marked as a featured vendor."
167
  msgstr ""
168
 
169
- #: classes/admin-withdraw.php:190
170
  msgid "Requests Deleted!"
171
  msgstr ""
172
 
173
- #: classes/admin-withdraw.php:194
174
  msgid "Requests Cancelled!"
175
  msgstr ""
176
 
177
- #: classes/admin-withdraw.php:198
178
  msgid "Requests Approved!"
179
  msgstr ""
180
 
181
- #: classes/admin-withdraw.php:219 classes/admin-withdraw.php:233
182
  msgid "User Name"
183
  msgstr ""
184
 
185
- #: classes/admin-withdraw.php:220 classes/admin-withdraw.php:234
186
  #: templates/withdraw/approved-request-listing.php:14
187
  #: templates/withdraw/cancelled-request-listing.php:14
188
  #: templates/withdraw/pending-request-listing.php:14
189
  msgid "Amount"
190
  msgstr ""
191
 
192
- #: classes/admin-withdraw.php:221 classes/admin-withdraw.php:235
193
  #: templates/withdraw/approved-request-listing.php:15
194
  #: templates/withdraw/cancelled-request-listing.php:15
195
  #: templates/withdraw/pending-request-listing.php:15
196
  msgid "Method"
197
  msgstr ""
198
 
199
- #: classes/admin-withdraw.php:222 classes/admin-withdraw.php:236
200
  msgid "Method Details"
201
  msgstr ""
202
 
203
- #: classes/admin-withdraw.php:223 classes/admin-withdraw.php:237
204
  #: templates/withdraw/cancelled-request-listing.php:17
205
  msgid "Note"
206
  msgstr ""
207
 
208
- #: classes/admin-withdraw.php:224 classes/admin-withdraw.php:238
209
  msgid "IP"
210
  msgstr ""
211
 
212
- #: classes/admin-withdraw.php:225 classes/admin-withdraw.php:239
213
- #: includes/admin-functions.php:49 templates/my-orders.php:28
214
- #: templates/orders/listing.php:21 templates/orders/listing.php:67
215
- #: templates/products/products-listing.php:66
216
- #: templates/products/products-listing.php:196 templates/sub-orders.php:26
217
  #: templates/withdraw/approved-request-listing.php:16
218
  #: templates/withdraw/cancelled-request-listing.php:16
219
  #: templates/withdraw/pending-request-listing.php:16
220
  msgid "Date"
221
  msgstr ""
222
 
223
- #: classes/admin-withdraw.php:263 classes/admin-withdraw.php:273
224
  msgid "Approve"
225
  msgstr ""
226
 
227
- #: classes/admin-withdraw.php:264 classes/admin-withdraw.php:268
228
  #: includes/product-functions.php:297 templates/my-orders.php:83
229
- #: templates/orders/details.php:187
230
  #: templates/products/new-product-single.php:226
231
  #: templates/products/new-product.php:159
232
  #: templates/products/tmpl-add-product-popup.php:61
@@ -235,99 +259,104 @@ msgstr ""
235
  msgid "Cancel"
236
  msgstr ""
237
 
238
- #: classes/admin-withdraw.php:269 classes/admin-withdraw.php:274
239
  #: includes/admin/views/withdraw.php:14
240
  #: templates/dashboard/orders-widget.php:31
241
  msgid "Pending"
242
  msgstr ""
243
 
244
- #: classes/admin-withdraw.php:279 classes/admin-withdraw.php:358
245
- #: classes/ajax.php:446 includes/woo-views/html-product-download.php:18
246
  #: includes/woo-views/html-product-download.php:38
247
  msgid "Delete"
248
  msgstr ""
249
 
250
- #: classes/admin-withdraw.php:303 templates/orders/details.php:280
251
  msgid "Add note"
252
  msgstr ""
253
 
254
- #: classes/admin-withdraw.php:309
255
  msgid "Save"
256
  msgstr ""
257
 
258
- #: classes/admin-withdraw.php:310
259
  msgid "cancel"
260
  msgstr ""
261
 
262
- #: classes/admin-withdraw.php:326
263
  msgid "No results found"
264
  msgstr ""
265
 
266
- #: classes/admin-withdraw.php:338
267
  msgid "Bulk Actions"
268
  msgstr ""
269
 
270
- #: classes/admin-withdraw.php:342 classes/admin-withdraw.php:352
271
  msgid "Approve Requests"
272
  msgstr ""
273
 
274
- #: classes/admin-withdraw.php:343 classes/admin-withdraw.php:347
275
  msgid "Mark as Cancelled"
276
  msgstr ""
277
 
278
- #: classes/admin-withdraw.php:348 classes/admin-withdraw.php:353
279
  msgid "Mark Pending"
280
  msgstr ""
281
 
282
- #: classes/admin-withdraw.php:359
283
  msgid "Download PayPal mass payment file"
284
  msgstr ""
285
 
286
- #: classes/admin-withdraw.php:364
287
  msgid "Apply"
288
  msgstr ""
289
 
290
- #: classes/admin-withdraw.php:373
291
  msgid "&laquo;"
292
  msgstr ""
293
 
294
- #: classes/admin-withdraw.php:374
295
  msgid "&raquo;"
296
  msgstr ""
297
 
298
- #: classes/ajax.php:94
299
- msgid "Something wrong, please try again later"
 
300
  msgstr ""
301
 
302
- #: classes/ajax.php:108
303
- msgid "<br><strong> Vendor:</strong> %s"
304
  msgstr ""
305
 
306
- #: classes/ajax.php:123 classes/template-settings.php:207
307
- #: classes/template-settings.php:215 classes/template-settings.php:221
308
- #: classes/template-settings.php:227 classes/template-settings.php:261
309
- #: classes/template-settings.php:323 classes/template-settings.php:362
310
- #: classes/template-settings.php:409 classes/template-withdraw.php:177
311
- #: classes/template-withdraw.php:202
312
  msgid "Are you cheating?"
313
  msgstr ""
314
 
315
- #: classes/ajax.php:158 classes/ajax.php:192
316
  msgid "You do not have sufficient permissions to access this page."
317
  msgstr ""
318
 
319
- #: classes/ajax.php:162 classes/ajax.php:196
320
  msgid "You have taken too long. Please go back and retry."
321
  msgstr ""
322
 
323
- #: classes/ajax.php:171 classes/ajax.php:205
324
  msgid "You do not have permission to change this order"
325
  msgstr ""
326
 
327
- #: classes/ajax.php:256
328
  msgid "File %d"
329
  msgstr ""
330
 
 
 
 
 
331
  #: classes/ajax.php:307 classes/ajax.php:312
332
  msgid "Please provide your name."
333
  msgstr ""
@@ -340,15 +369,15 @@ msgstr ""
340
  msgid "Email sent successfully!"
341
  msgstr ""
342
 
343
- #: classes/ajax.php:380 templates/orders/details.php:266
344
  msgid "Delete note"
345
  msgstr ""
346
 
347
- #: classes/ajax.php:565
348
  msgid "Error: Nonce verification failed"
349
  msgstr ""
350
 
351
- #: classes/ajax.php:655
352
  msgid "Image could not be processed. Please go back and try again."
353
  msgstr ""
354
 
@@ -417,36 +446,86 @@ msgid "Footer Widget link hover"
417
  msgstr ""
418
 
419
  #: classes/installer.php:135 includes/admin/class-settings.php:167
420
- #: includes/admin/setup-wizard.php:263 includes/admin-functions.php:52
421
- #: includes/admin-functions.php:564 includes/admin-functions.php:588
422
- #: includes/wc-template.php:14 templates/my-orders.php:31
 
423
  msgid "Vendor"
424
  msgstr ""
425
 
426
- #: classes/installer.php:166 includes/admin/class-admin.php:190
427
- #: includes/admin/class-settings.php:263 includes/template-tags.php:302
428
  msgid "Dashboard"
429
  msgstr ""
430
 
431
- #: classes/installer.php:172
432
  msgid "Store List"
433
  msgstr ""
434
 
435
- #: classes/installer.php:178 includes/admin/class-settings.php:269
436
  #: templates/global/header-menu.php:46
437
  msgid "My Orders"
438
  msgstr ""
439
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
440
  #: classes/seller-setup-wizard.php:63 includes/admin/setup-wizard.php:78
441
  msgid "Introduction"
442
  msgstr ""
443
 
444
  #: classes/seller-setup-wizard.php:68 includes/admin/setup-wizard.php:83
445
- #: includes/template-tags.php:343
446
  msgid "Store"
447
  msgstr ""
448
 
449
- #: classes/seller-setup-wizard.php:73 includes/template-tags.php:349
450
  msgid "Payment"
451
  msgstr ""
452
 
@@ -458,92 +537,92 @@ msgstr ""
458
  msgid "Vendor &rsaquo; Setup Wizard"
459
  msgstr ""
460
 
461
- #: classes/seller-setup-wizard.php:199
462
  msgid "Return to the Marketplace"
463
  msgstr ""
464
 
465
- #: classes/seller-setup-wizard.php:212
466
  msgid "Welcome to the Marketplace!"
467
  msgstr ""
468
 
469
- #: classes/seller-setup-wizard.php:213
470
  msgid ""
471
  "Thank you for choosing The Marketplace to power your online store! This "
472
  "quick setup wizard will help you configure the basic settings. <strong>It’s "
473
  "completely optional and shouldn’t take longer than two minutes.</strong>"
474
  msgstr ""
475
 
476
- #: classes/seller-setup-wizard.php:214
477
  msgid ""
478
  "No time right now? If you don’t want to go through the wizard, you can skip "
479
  "and return to the Store!"
480
  msgstr ""
481
 
482
- #: classes/seller-setup-wizard.php:216 includes/admin/setup-wizard.php:248
483
  msgid "Let's Go!"
484
  msgstr ""
485
 
486
- #: classes/seller-setup-wizard.php:217 includes/admin/setup-wizard.php:249
487
  msgid "Not right now"
488
  msgstr ""
489
 
490
- #: classes/seller-setup-wizard.php:242 includes/admin/setup-wizard.php:267
491
  msgid "Store Setup"
492
  msgstr ""
493
 
494
- #: classes/seller-setup-wizard.php:246 templates/settings/store-form.php:117
495
  msgid "Store Product Per Page"
496
  msgstr ""
497
 
498
- #: classes/seller-setup-wizard.php:252
499
  msgid "Street"
500
  msgstr ""
501
 
502
- #: classes/seller-setup-wizard.php:258 templates/settings/address-form.php:44
503
  msgid "Street 2"
504
  msgstr ""
505
 
506
- #: classes/seller-setup-wizard.php:264 templates/settings/address-form.php:60
507
  msgid "City"
508
  msgstr ""
509
 
510
- #: classes/seller-setup-wizard.php:269
511
  msgid "Post/Zip Code"
512
  msgstr ""
513
 
514
- #: classes/seller-setup-wizard.php:281
515
  msgid "State"
516
  msgstr ""
517
 
518
- #: classes/seller-setup-wizard.php:283
519
  msgid "State Name"
520
  msgstr ""
521
 
522
- #: classes/seller-setup-wizard.php:287 templates/settings/store-form.php:147
523
  msgid "Email"
524
  msgstr ""
525
 
526
- #: classes/seller-setup-wizard.php:290 templates/settings/store-form.php:152
527
  msgid "Show email address in store"
528
  msgstr ""
529
 
530
- #: classes/seller-setup-wizard.php:298 classes/seller-setup-wizard.php:437
531
- #: includes/admin/setup-wizard.php:293 includes/admin/setup-wizard.php:373
532
- #: includes/admin/setup-wizard.php:484
533
- msgid "Continue"
534
- msgstr ""
535
-
536
  #: classes/seller-setup-wizard.php:299 classes/seller-setup-wizard.php:438
537
  #: includes/admin/setup-wizard.php:294 includes/admin/setup-wizard.php:374
538
  #: includes/admin/setup-wizard.php:485
 
 
 
 
 
 
539
  msgid "Skip this step"
540
  msgstr ""
541
 
542
- #: classes/seller-setup-wizard.php:318
543
  msgid "Select an option&hellip;"
544
  msgstr ""
545
 
546
- #: classes/seller-setup-wizard.php:413
547
  msgid "Payment Setup"
548
  msgstr ""
549
 
@@ -555,82 +634,92 @@ msgstr ""
555
  msgid "Go to your Store Dashboard!"
556
  msgstr ""
557
 
558
- #: classes/template-orders.php:106 classes/template-orders.php:175
 
 
 
 
559
  msgid "Order No"
560
  msgstr ""
561
 
562
- #: classes/template-orders.php:107 classes/template-orders.php:176
563
  #: templates/orders/details.php:21
564
  msgid "Order Items"
565
  msgstr ""
566
 
567
- #: classes/template-orders.php:108 classes/template-orders.php:177
568
  msgid "Shipping method"
569
  msgstr ""
570
 
571
- #: classes/template-orders.php:109 classes/template-orders.php:178
572
  msgid "Shipping Cost"
573
  msgstr ""
574
 
575
- #: classes/template-orders.php:110 classes/template-orders.php:179
576
  msgid "Payment method"
577
  msgstr ""
578
 
579
- #: classes/template-orders.php:111 classes/template-orders.php:180
580
- #: templates/orders/listing.php:18 templates/orders/listing.php:34
581
  msgid "Order Total"
582
  msgstr ""
583
 
584
- #: classes/template-orders.php:112 classes/template-orders.php:181
585
  msgid "Order Status"
586
  msgstr ""
587
 
588
- #: classes/template-orders.php:113 classes/template-orders.php:182
589
  msgid "Order Date"
590
  msgstr ""
591
 
592
- #: classes/template-orders.php:114 classes/template-orders.php:183
593
  msgid "Customer Name"
594
  msgstr ""
595
 
596
- #: classes/template-orders.php:115 classes/template-orders.php:184
597
  msgid "Customer Email"
598
  msgstr ""
599
 
600
- #: classes/template-orders.php:116 classes/template-orders.php:185
601
  msgid "Customer Phone"
602
  msgstr ""
603
 
604
- #: classes/template-orders.php:117 classes/template-orders.php:186
605
  msgid "Customer IP"
606
  msgstr ""
607
 
608
- #: classes/template-products.php:107
 
 
 
 
 
 
609
  msgid "Details of your product ..."
610
  msgstr ""
611
 
612
- #: classes/template-products.php:120 classes/template-products.php:242
613
  #: includes/product-functions.php:32
614
  msgid "Please enter product title"
615
  msgstr ""
616
 
617
- #: classes/template-products.php:126 classes/template-products.php:248
618
  #: includes/product-functions.php:38
619
  msgid "Please select a category"
620
  msgstr ""
621
 
622
- #: classes/template-products.php:130 classes/template-products.php:252
623
  #: includes/product-functions.php:42
624
  msgid "Please select AT LEAST ONE category"
625
  msgstr ""
626
 
627
- #: classes/template-products.php:259
628
  msgid "No product found !"
629
  msgstr ""
630
 
631
  #: classes/template-settings.php:70 classes/template-settings.php:74
632
- #: dokan.php:409 includes/admin/class-admin.php:197
633
- #: includes/admin/class-admin.php:220 includes/admin/class-admin.php:354
634
  #: includes/admin/views/welcome.php:20
635
  msgid "Settings"
636
  msgstr ""
@@ -646,77 +735,85 @@ msgid ""
646
  "payments seamlessly."
647
  msgstr ""
648
 
649
- #: classes/template-settings.php:240
 
 
 
 
 
 
 
 
650
  msgid "Your information has been saved successfully"
651
  msgstr ""
652
 
653
- #: classes/template-settings.php:269 classes/template-settings.php:370
654
  msgid "Store name required"
655
  msgstr ""
656
 
657
- #: classes/template-settings.php:275 classes/template-settings.php:331
658
- #: classes/template-settings.php:376
659
  msgid "Store type required"
660
  msgstr ""
661
 
662
- #: classes/template-settings.php:282 classes/template-settings.php:339
663
- #: classes/template-settings.php:383 classes/template-settings.php:418
664
  msgid "Invalid email"
665
  msgstr ""
666
 
667
- #: classes/template-settings.php:299
668
  msgid "Address field for %s is required"
669
  msgstr ""
670
 
671
- #: classes/template-settings.php:568
672
  msgid "Add Profile Picture to gain %s%% progress"
673
  msgstr ""
674
 
675
- #: classes/template-settings.php:587 includes/functions.php:1634
676
  msgid "Facebook"
677
  msgstr ""
678
 
679
- #: classes/template-settings.php:587
680
  msgid "Google+"
681
  msgstr ""
682
 
683
- #: classes/template-settings.php:588
684
  msgid "Add %s profile link to gain %s%% progress"
685
  msgstr ""
686
 
687
- #: classes/template-settings.php:602
688
  msgid "Add Phone to gain %s%% progress"
689
  msgstr ""
690
 
691
- #: classes/template-settings.php:615
692
  msgid "Add Banner to gain %s%% progress"
693
  msgstr ""
694
 
695
- #: classes/template-settings.php:627
696
  msgid "Add Store Name to gain %s%% progress"
697
  msgstr ""
698
 
699
- #: classes/template-settings.php:639
700
  msgid "Add address to gain %s%% progress"
701
  msgstr ""
702
 
703
- #: classes/template-settings.php:687
704
  msgid "Add a Payment method to gain %s%% progress"
705
  msgstr ""
706
 
707
- #: classes/template-settings.php:695
708
  msgid "Add Map location to gain %s%% progress"
709
  msgstr ""
710
 
711
- #: classes/template-settings.php:715
712
  msgid "Book"
713
  msgstr ""
714
 
715
- #: classes/template-settings.php:716
716
  msgid "Dress"
717
  msgstr ""
718
 
719
- #: classes/template-settings.php:717
720
  msgid "Electronic"
721
  msgstr ""
722
 
@@ -724,65 +821,69 @@ msgstr ""
724
  msgid "Please install <a href=\"%s\"><strong>WooCommerce</strong></a> plugin first"
725
  msgstr ""
726
 
727
- #: classes/template-withdraw.php:120
 
 
 
 
728
  msgid "Current Balance: %s "
729
  msgstr ""
730
 
731
- #: classes/template-withdraw.php:123
732
  msgid "<br>Minimum Withdraw amount: %s "
733
  msgstr ""
734
 
735
- #: classes/template-withdraw.php:126
736
  msgid "<br>Withdraw Threshold: %d days "
737
  msgstr ""
738
 
739
- #: classes/template-withdraw.php:211
740
  msgid "Withdraw amount required "
741
  msgstr ""
742
 
743
- #: classes/template-withdraw.php:214
744
  msgid "You don't have enough balance for this request"
745
  msgstr ""
746
 
747
- #: classes/template-withdraw.php:216
748
  msgid "Withdraw amount must be greater than %d"
749
  msgstr ""
750
 
751
- #: classes/template-withdraw.php:220
752
  msgid "withdraw method required"
753
  msgstr ""
754
 
755
- #: classes/template-withdraw.php:284
756
  msgid "Your request has been cancelled successfully!"
757
  msgstr ""
758
 
759
- #: classes/template-withdraw.php:288
760
  msgid "Your request has been received successfully and being reviewed!"
761
  msgstr ""
762
 
763
- #: classes/template-withdraw.php:292
764
  msgid "Unknown error!"
765
  msgstr ""
766
 
767
- #: classes/template-withdraw.php:319
768
  msgid "You already withdrawed %s. This amount will deducted from your balance."
769
  msgstr ""
770
 
771
- #: classes/template-withdraw.php:328
772
  msgid "You already have pending withdraw request(s)."
773
  msgstr ""
774
 
775
- #: classes/template-withdraw.php:328
776
  msgid ""
777
  "Please submit your request after approval or cancellation of your previous "
778
  "request."
779
  msgstr ""
780
 
781
- #: classes/template-withdraw.php:343
782
  msgid "You don't have sufficient balance for a withdraw request!"
783
  msgstr ""
784
 
785
- #: classes/template-withdraw.php:386 classes/template-withdraw.php:413
786
  msgid "Sorry, no transactions were found!"
787
  msgstr ""
788
 
@@ -793,39 +894,39 @@ msgid ""
793
  "<strong>20% discount</strong> on upgrades and add-on purchase."
794
  msgstr ""
795
 
796
- #: classes/upgrade.php:76 includes/admin/class-admin.php:417
797
  msgid ""
798
  "<strong>Dokan Data Update Required</strong> &#8211; We need to update your "
799
  "install to the latest version"
800
  msgstr ""
801
 
802
- #: classes/upgrade.php:77 includes/admin/class-admin.php:418
803
  msgid "Run the updater"
804
  msgstr ""
805
 
806
- #: classes/upgrade.php:82 includes/admin/class-admin.php:423
807
  msgid ""
808
  "It is strongly recommended that you backup your database before proceeding. "
809
  "Are you sure you wish to run the updater now?"
810
  msgstr ""
811
 
812
- #: classes/withdraw.php:238 templates/withdraw/pending-request-listing.php:41
813
  msgid "Pending Reivew"
814
  msgstr ""
815
 
816
- #: classes/withdraw.php:242 templates/withdraw/pending-request-listing.php:43
817
  msgid "Accepted"
818
  msgstr ""
819
 
820
- #: dokan.php:172
821
  msgid "<b>Dokan</b> requires %sWooCommerce%s to be installed & activated!"
822
  msgstr ""
823
 
824
- #: dokan.php:406
825
  msgid "Get Pro"
826
  msgstr ""
827
 
828
- #: dokan.php:410 includes/admin/views/welcome.php:21
829
  msgid "Documentation"
830
  msgstr ""
831
 
@@ -898,35 +999,32 @@ msgid "Dokan requires some pages to be configured and you can set them up here"
898
  msgstr ""
899
 
900
  #: includes/admin/class-admin.php:62
901
- msgid "Pro upgrade and all extensions"
902
- msgstr ""
903
-
904
- #: includes/admin/class-admin.php:62
905
- msgid "all extensions"
906
- msgstr ""
907
-
908
- #: includes/admin/class-admin.php:64
909
  msgid ""
910
- "<h2><span class=\"dashicons dashicons-awards\"></span> weDevs 4th Year "
911
- "Anniversary Offer</h2>"
 
 
912
  msgstr ""
913
 
914
  #: includes/admin/class-admin.php:65
915
  msgid ""
916
- "<p>Get <strong class=\"highlight-text\">44&#37; discount</strong> on %2$s "
917
- "also <a target=\"_blank\" href=\"%1$s\"><strong>WIN any "
918
- "product</strong></a> from our 4th year anniversary giveaway. Offer ending "
919
- "soon!</p>"
920
  msgstr ""
921
 
922
- #: includes/admin/class-admin.php:183 includes/admin/class-admin.php:191
923
- #: includes/admin/class-admin.php:340 includes/admin/setup-wizard.php:93
924
- #: includes/admin/views/dashboard.php:72 includes/template-tags.php:321
 
 
 
 
925
  #: templates/withdraw/header.php:11
926
  msgid "Withdraw"
927
  msgstr ""
928
 
929
- #: includes/admin/class-admin.php:186
930
  msgid "Withdraw %s"
931
  msgstr ""
932
 
@@ -934,32 +1032,24 @@ msgstr ""
934
  msgid "Dokan"
935
  msgstr ""
936
 
937
- #: includes/admin/class-admin.php:190 includes/admin/class-admin.php:333
938
  #: includes/admin/views/dashboard.php:96
939
  msgid "Dokan Dashboard"
940
  msgstr ""
941
 
942
- #: includes/admin/class-admin.php:192 includes/admin/class-admin.php:347
943
  msgid "PRO Features"
944
  msgstr ""
945
 
946
- #: includes/admin/class-admin.php:196
947
  msgid "Help"
948
  msgstr ""
949
 
950
- #: includes/admin/class-admin.php:196
951
  msgid "<span style=\"color:#f18500\">Help</span>"
952
  msgstr ""
953
 
954
- #: includes/admin/class-admin.php:198
955
- msgid "Add Ons"
956
- msgstr ""
957
-
958
- #: includes/admin/class-admin.php:198
959
- msgid "Add-ons"
960
- msgstr ""
961
-
962
- #: includes/admin/class-admin.php:205 includes/admin/views/welcome.php:12
963
  msgid "Welcome to Dokan"
964
  msgstr ""
965
 
@@ -987,7 +1077,7 @@ msgstr ""
987
  msgid "Disable Vendors and Customers from accessing the wp-admin dashboard area"
988
  msgstr ""
989
 
990
- #: includes/admin/class-settings.php:150 includes/admin/setup-wizard.php:271
991
  msgid "Vendor Store URL"
992
  msgstr ""
993
 
@@ -995,8 +1085,8 @@ msgstr ""
995
  msgid "Define the seller store URL (%s<strong>[this-text]</strong>/[seller-name])"
996
  msgstr ""
997
 
998
- #: includes/admin/class-settings.php:157 includes/functions.php:1067
999
- #: templates/settings/store-form.php:194
1000
  msgid "Terms and Conditions"
1001
  msgstr ""
1002
 
@@ -1004,7 +1094,7 @@ msgstr ""
1004
  msgid "Enable Terms and Conditions for vendor stores"
1005
  msgstr ""
1006
 
1007
- #: includes/admin/class-settings.php:164 includes/admin/setup-wizard.php:278
1008
  msgid "Extra Fee Recipient"
1009
  msgstr ""
1010
 
@@ -1012,7 +1102,7 @@ msgstr ""
1012
  msgid "Should extra fees, such as Shipping and Tax, go to the Vendor or the Admin?"
1013
  msgstr ""
1014
 
1015
- #: includes/admin/class-settings.php:167 includes/admin/setup-wizard.php:264
1016
  msgid "Admin"
1017
  msgstr ""
1018
 
@@ -1074,69 +1164,69 @@ msgstr ""
1074
  msgid "Amount you get from sales"
1075
  msgstr ""
1076
 
1077
- #: includes/admin/class-settings.php:223 includes/admin/setup-wizard.php:351
1078
  msgid "Order Status Change"
1079
  msgstr ""
1080
 
1081
- #: includes/admin/class-settings.php:224
1082
  msgid "Vendor can update order status"
1083
  msgstr ""
1084
 
1085
- #: includes/admin/class-settings.php:230
1086
  msgid "Disable Product Popup"
1087
  msgstr ""
1088
 
1089
- #: includes/admin/class-settings.php:231
1090
  msgid "Disable add new product in popup view"
1091
  msgstr ""
1092
 
1093
- #: includes/admin/class-settings.php:237
1094
  msgid "Disable Welcome Wizard"
1095
  msgstr ""
1096
 
1097
- #: includes/admin/class-settings.php:238
1098
  msgid "Disable welcome wizard for newly registered vendors"
1099
  msgstr ""
1100
 
1101
- #: includes/admin/class-settings.php:246 includes/admin/setup-wizard.php:413
1102
  msgid "Withdraw Methods"
1103
  msgstr ""
1104
 
1105
- #: includes/admin/class-settings.php:247
1106
  msgid "Withdraw methods for vendors"
1107
  msgstr ""
1108
 
1109
- #: includes/admin/class-settings.php:254 includes/admin/setup-wizard.php:466
1110
  msgid "Minimum Withdraw Limit"
1111
  msgstr ""
1112
 
1113
- #: includes/admin/class-settings.php:255
1114
  msgid ""
1115
  "Minimum balance required to make a withdraw request. Leave blank to set no "
1116
  "minimum limits."
1117
  msgstr ""
1118
 
1119
- #: includes/admin/class-settings.php:275
1120
  msgid "Terms and Conditions Page"
1121
  msgstr ""
1122
 
1123
- #: includes/admin/class-settings.php:278
1124
  msgid ""
1125
  "Select where you want to add Dokan pages <a target=\"_blank\" href=\"%s\"> "
1126
  "Learn More </a>"
1127
  msgstr ""
1128
 
1129
- #: includes/admin/class-settings.php:284
1130
  msgid "Vendor Setup Wizard Logo"
1131
  msgstr ""
1132
 
1133
- #: includes/admin/class-settings.php:286
1134
  msgid ""
1135
  "Recommended Logo size ( 270px X 90px ). If no logo is uploaded, site title "
1136
  "is shown by default."
1137
  msgstr ""
1138
 
1139
- #: includes/admin/class-settings.php:290
1140
  msgid "Store Header Template"
1141
  msgstr ""
1142
 
@@ -1144,145 +1234,145 @@ msgstr ""
1144
  msgid "Dokan &rsaquo; Setup Wizard"
1145
  msgstr ""
1146
 
1147
- #: includes/admin/setup-wizard.php:202
1148
  msgid "Return to the WordPress Dashboard"
1149
  msgstr ""
1150
 
1151
- #: includes/admin/setup-wizard.php:244
1152
  msgid "Welcome to the world of Dokan!"
1153
  msgstr ""
1154
 
1155
- #: includes/admin/setup-wizard.php:245
1156
  msgid ""
1157
  "Thank you for choosing Dokan to power your online marketplace! This quick "
1158
  "setup wizard will help you configure the basic settings. <strong>It’s "
1159
  "completely optional and shouldn’t take longer than three minutes.</strong>"
1160
  msgstr ""
1161
 
1162
- #: includes/admin/setup-wizard.php:246
1163
  msgid ""
1164
  "No time right now? If you don’t want to go through the wizard, you can skip "
1165
  "and return to the WordPress dashboard. Come back anytime if you change your "
1166
  "mind!"
1167
  msgstr ""
1168
 
1169
- #: includes/admin/setup-wizard.php:274
1170
  msgid "Define vendor store URL"
1171
  msgstr ""
1172
 
1173
- #: includes/admin/setup-wizard.php:288
1174
  msgid "Extra fees like shipping and tax will go to"
1175
  msgstr ""
1176
 
1177
- #: includes/admin/setup-wizard.php:328
1178
  msgid "Tab View"
1179
  msgstr ""
1180
 
1181
- #: includes/admin/setup-wizard.php:329
1182
  msgid "Flat View"
1183
  msgstr ""
1184
 
1185
- #: includes/admin/setup-wizard.php:333
1186
  msgid "Selling Setup"
1187
  msgstr ""
1188
 
1189
- #: includes/admin/setup-wizard.php:337
1190
  msgid "New Vendor Enable Selling"
1191
  msgstr ""
1192
 
1193
- #: includes/admin/setup-wizard.php:340
1194
  msgid "Make selling status enable for new registred vendor"
1195
  msgstr ""
1196
 
1197
- #: includes/admin/setup-wizard.php:344
1198
  msgid "Vendor Commission %"
1199
  msgstr ""
1200
 
1201
- #: includes/admin/setup-wizard.php:347
1202
  msgid "How much amount (%) a vendor will get from each order"
1203
  msgstr ""
1204
 
1205
- #: includes/admin/setup-wizard.php:354
1206
  msgid "Vendor can change order status"
1207
  msgstr ""
1208
 
1209
- #: includes/admin/setup-wizard.php:358
1210
  msgid "Add/Edit Product Style"
1211
  msgstr ""
1212
 
1213
- #: includes/admin/setup-wizard.php:368
1214
  msgid "The style you prefer for vendor to add or edit products."
1215
  msgstr ""
1216
 
1217
- #: includes/admin/setup-wizard.php:409
1218
  msgid "Withdraw Setup"
1219
  msgstr ""
1220
 
1221
- #: includes/admin/setup-wizard.php:420
1222
  msgid "Paypal"
1223
  msgstr ""
1224
 
1225
- #: includes/admin/setup-wizard.php:423
1226
  msgid "Enable paypal for your vendor as a withdraw method"
1227
  msgstr ""
1228
 
1229
- #: includes/admin/setup-wizard.php:435
1230
  msgid "Bank"
1231
  msgstr ""
1232
 
1233
- #: includes/admin/setup-wizard.php:438
1234
  msgid "Enable bank transfer for your vendor as a withdraw method"
1235
  msgstr ""
1236
 
1237
- #: includes/admin/setup-wizard.php:450
1238
  msgid "Skrill"
1239
  msgstr ""
1240
 
1241
- #: includes/admin/setup-wizard.php:453
1242
  msgid "Enable skrill for your vendor as a withdraw method"
1243
  msgstr ""
1244
 
1245
- #: includes/admin/setup-wizard.php:469
1246
  msgid ""
1247
  "Minimum balance required to make a withdraw request ( Leave it blank to set "
1248
  "no limits )"
1249
  msgstr ""
1250
 
1251
- #: includes/admin/setup-wizard.php:473
1252
  msgid "Order Status for Withdraw"
1253
  msgstr ""
1254
 
1255
- #: includes/admin/setup-wizard.php:475 includes/order-functions.php:511
1256
  #: templates/dashboard/orders-widget.php:26
1257
  msgid "Completed"
1258
  msgstr ""
1259
 
1260
- #: includes/admin/setup-wizard.php:476 includes/order-functions.php:526
1261
- #: templates/dashboard/orders-widget.php:36 templates/orders/listing.php:96
1262
  msgid "Processing"
1263
  msgstr ""
1264
 
1265
- #: includes/admin/setup-wizard.php:477 includes/order-functions.php:521
1266
  msgid "On-hold"
1267
  msgstr ""
1268
 
1269
- #: includes/admin/setup-wizard.php:479
1270
  msgid "Order status for which vendor can make a withdraw request."
1271
  msgstr ""
1272
 
1273
- #: includes/admin/setup-wizard.php:515
1274
  msgid "Your Marketplace is Ready!"
1275
  msgstr ""
1276
 
1277
- #: includes/admin/setup-wizard.php:519
1278
  msgid "Next Steps"
1279
  msgstr ""
1280
 
1281
- #: includes/admin/setup-wizard.php:521
1282
  msgid "Setup your dokan!"
1283
  msgstr ""
1284
 
1285
- #: includes/admin/setup-wizard.php:525
1286
  msgid "Learn More"
1287
  msgstr ""
1288
 
@@ -1425,99 +1515,105 @@ msgstr ""
1425
  msgid "Approved"
1426
  msgstr ""
1427
 
1428
- #: includes/admin/views/withdraw.php:24 includes/order-functions.php:536
1429
  #: templates/dashboard/orders-widget.php:41
1430
  msgid "Cancelled"
1431
  msgstr ""
1432
 
1433
- #: includes/admin-functions.php:42 includes/product-functions.php:201
1434
- #: templates/my-orders.php:29 templates/orders/listing.php:19
1435
- #: templates/orders/listing.php:37 templates/products/products-listing.php:59
1436
- #: templates/products/products-listing.php:125 templates/sub-orders.php:27
1437
- #: templates/withdraw/pending-request-listing.php:18
1438
- msgid "Status"
1439
- msgstr ""
1440
-
1441
- #: includes/admin-functions.php:43
1442
- #: templates/dashboard/big-counter-widget.php:32 templates/my-orders.php:27
1443
  #: templates/orders/details.php:21 templates/orders/listing.php:17
1444
- #: templates/orders/listing.php:31 templates/sub-orders.php:25
1445
  msgid "Order"
1446
  msgstr ""
1447
 
1448
- #: includes/admin-functions.php:44
1449
- msgid "Purchased"
 
 
 
 
 
1450
  msgstr ""
1451
 
1452
- #: includes/admin-functions.php:45
1453
- msgid "Ship to"
1454
  msgstr ""
1455
 
1456
- #: includes/admin-functions.php:47
1457
- msgid "Customer Message"
1458
- msgstr ""
1459
-
1460
- #: includes/admin-functions.php:48 templates/orders/details.php:242
1461
- msgid "Order Notes"
1462
  msgstr ""
1463
 
1464
- #: includes/admin-functions.php:50 templates/dashboard/orders-widget.php:21
 
1465
  #: templates/dashboard/products-widget.php:26 templates/my-orders.php:30
1466
  #: templates/orders/order-fee-html.php:17 templates/sub-orders.php:28
1467
  msgid "Total"
1468
  msgstr ""
1469
 
1470
- #: includes/admin-functions.php:51
1471
  msgid "Actions"
1472
  msgstr ""
1473
 
1474
- #: includes/admin-functions.php:53
1475
  msgid "Sub Order"
1476
  msgstr ""
1477
 
1478
- #: includes/admin-functions.php:79
 
 
 
 
 
 
 
 
 
 
 
 
1479
  msgid "Sub Order of"
1480
  msgstr ""
1481
 
1482
- #: includes/admin-functions.php:89
1483
  msgid "Show Sub-Orders"
1484
  msgstr ""
1485
 
1486
- #: includes/admin-functions.php:89
1487
  msgid "Hide Sub-Orders"
1488
  msgstr ""
1489
 
1490
- #: includes/admin-functions.php:246
1491
  msgid "Toggle Sub-orders"
1492
  msgstr ""
1493
 
1494
- #: includes/admin-functions.php:375 includes/admin-functions.php:738
1495
  msgid "Total Sales"
1496
  msgstr ""
1497
 
1498
- #: includes/admin-functions.php:382 includes/admin-functions.php:745
1499
  msgid "Total: "
1500
  msgstr ""
1501
 
1502
- #: includes/admin-functions.php:385 includes/admin-functions.php:748
1503
- #: includes/reports.php:347
1504
  msgid "Number of orders"
1505
  msgstr ""
1506
 
1507
- #: includes/admin-functions.php:392 includes/admin-functions.php:755
1508
- #: includes/reports.php:354
1509
  msgid "sales"
1510
  msgstr ""
1511
 
1512
- #: includes/admin-functions.php:395 includes/admin-functions.php:758
1513
  msgid "Commision"
1514
  msgstr ""
1515
 
1516
- #: includes/admin-functions.php:402 includes/admin-functions.php:765
1517
  msgid "Commision: "
1518
  msgstr ""
1519
 
1520
- #: includes/class-core.php:131
1521
  msgid "Page %s"
1522
  msgstr ""
1523
 
@@ -1557,218 +1653,210 @@ msgstr ""
1557
  msgid "[%s] Your product has been approved!"
1558
  msgstr ""
1559
 
1560
- #: includes/class-scripts.php:108
1561
- msgid "Available"
1562
- msgstr ""
1563
-
1564
- #: includes/class-scripts.php:109
1565
- msgid "Not Available"
1566
- msgstr ""
1567
-
1568
- #: includes/class-scripts.php:111
1569
  msgid "Are you sure?"
1570
  msgstr ""
1571
 
1572
- #: includes/class-scripts.php:112
1573
  msgid "Something went wrong. Please try again."
1574
  msgstr ""
1575
 
1576
- #: includes/class-scripts.php:161
1577
  msgid "This field is required"
1578
  msgstr ""
1579
 
1580
- #: includes/class-scripts.php:162
1581
  msgid "Please fix this field."
1582
  msgstr ""
1583
 
1584
- #: includes/class-scripts.php:163
1585
  msgid "Please enter a valid email address."
1586
  msgstr ""
1587
 
1588
- #: includes/class-scripts.php:164
1589
  msgid "Please enter a valid URL."
1590
  msgstr ""
1591
 
1592
- #: includes/class-scripts.php:165
1593
  msgid "Please enter a valid date."
1594
  msgstr ""
1595
 
1596
- #: includes/class-scripts.php:166
1597
  msgid "Please enter a valid date (ISO)."
1598
  msgstr ""
1599
 
1600
- #: includes/class-scripts.php:167
1601
  msgid "Please enter a valid number."
1602
  msgstr ""
1603
 
1604
- #: includes/class-scripts.php:168
1605
  msgid "Please enter only digits."
1606
  msgstr ""
1607
 
1608
- #: includes/class-scripts.php:169
1609
  msgid "Please enter a valid credit card number."
1610
  msgstr ""
1611
 
1612
- #: includes/class-scripts.php:170
1613
  msgid "Please enter the same value again."
1614
  msgstr ""
1615
 
1616
- #: includes/class-scripts.php:171
1617
  msgid "Please enter no more than {0} characters."
1618
  msgstr ""
1619
 
1620
- #: includes/class-scripts.php:172
1621
  msgid "Please enter at least {0} characters."
1622
  msgstr ""
1623
 
1624
- #: includes/class-scripts.php:173
1625
  msgid "Please enter a value between {0} and {1} characters long."
1626
  msgstr ""
1627
 
1628
- #: includes/class-scripts.php:174
1629
  msgid "Please enter a value between {0} and {1}."
1630
  msgstr ""
1631
 
1632
- #: includes/class-scripts.php:175
1633
  msgid "Please enter a value less than or equal to {0}."
1634
  msgstr ""
1635
 
1636
- #: includes/class-scripts.php:176
1637
  msgid "Please enter a value greater than or equal to {0}."
1638
  msgstr ""
1639
 
1640
- #: includes/class-scripts.php:270
1641
  msgid "Upload featured image"
1642
  msgstr ""
1643
 
1644
- #: includes/class-scripts.php:271
1645
  msgid "Choose a file"
1646
  msgstr ""
1647
 
1648
- #: includes/class-scripts.php:272
1649
  msgid "Add Images to Product Gallery"
1650
  msgstr ""
1651
 
1652
- #: includes/class-scripts.php:273
1653
  msgid "Set featured image"
1654
  msgstr ""
1655
 
1656
- #: includes/class-scripts.php:274
1657
  #: includes/woo-views/html-product-download.php:17
1658
  #: includes/woo-views/html-product-download.php:32
1659
  msgid "Insert file URL"
1660
  msgstr ""
1661
 
1662
- #: includes/class-scripts.php:275
1663
  msgid "Add to gallery"
1664
  msgstr ""
1665
 
1666
- #: includes/class-scripts.php:276
1667
  msgid "Sorry, this attribute option already exists, Try a different one."
1668
  msgstr ""
1669
 
1670
- #: includes/class-scripts.php:277
1671
  msgid ""
1672
  "Warning! This product will not have any variations if this option is not "
1673
  "checked."
1674
  msgstr ""
1675
 
1676
- #: includes/class-scripts.php:278
1677
  msgid "Enter a name for the new attribute term:"
1678
  msgstr ""
1679
 
1680
- #: includes/class-scripts.php:279
1681
  msgid "Remove this attribute?"
1682
  msgstr ""
1683
 
1684
- #: includes/class-scripts.php:287
1685
  msgid ""
1686
  "Are you sure you want to link all variations? This will create a new "
1687
  "variation for each and every possible combination of variation attributes "
1688
  "(max %d per run)."
1689
  msgstr ""
1690
 
1691
- #: includes/class-scripts.php:288
1692
  msgid "Enter a value"
1693
  msgstr ""
1694
 
1695
- #: includes/class-scripts.php:289
1696
  msgid "Variation menu order (determines position in the list of variations)"
1697
  msgstr ""
1698
 
1699
- #: includes/class-scripts.php:290
1700
  msgid "Enter a value (fixed or %)"
1701
  msgstr ""
1702
 
1703
- #: includes/class-scripts.php:291
1704
  msgid "Are you sure you want to delete all variations? This cannot be undone."
1705
  msgstr ""
1706
 
1707
- #: includes/class-scripts.php:292
1708
  msgid "Last warning, are you sure?"
1709
  msgstr ""
1710
 
1711
- #: includes/class-scripts.php:293
1712
  msgid "Choose an image"
1713
  msgstr ""
1714
 
1715
- #: includes/class-scripts.php:294
1716
  msgid "Set variation image"
1717
  msgstr ""
1718
 
1719
- #: includes/class-scripts.php:295
1720
  msgid "variation added"
1721
  msgstr ""
1722
 
1723
- #: includes/class-scripts.php:296
1724
  msgid "variations added"
1725
  msgstr ""
1726
 
1727
- #: includes/class-scripts.php:297
1728
  msgid "No variations added"
1729
  msgstr ""
1730
 
1731
- #: includes/class-scripts.php:298
1732
  msgid "Are you sure you want to remove this variation?"
1733
  msgstr ""
1734
 
1735
- #: includes/class-scripts.php:299
1736
  msgid "Sale start date (YYYY-MM-DD format or leave blank)"
1737
  msgstr ""
1738
 
1739
- #: includes/class-scripts.php:300
1740
  msgid "Sale end date (YYYY-MM-DD format or leave blank)"
1741
  msgstr ""
1742
 
1743
- #: includes/class-scripts.php:301
1744
  msgid "Save changes before changing page?"
1745
  msgstr ""
1746
 
1747
- #: includes/class-scripts.php:302
1748
  msgid "%qty% variation"
1749
  msgstr ""
1750
 
1751
- #: includes/class-scripts.php:303
1752
  msgid "%qty% variations"
1753
  msgstr ""
1754
 
1755
- #: includes/class-scripts.php:304
1756
  msgid "No Result Found"
1757
  msgstr ""
1758
 
1759
- #: includes/class-scripts.php:307
1760
  msgid "Select and Crop"
1761
  msgstr ""
1762
 
1763
- #: includes/class-scripts.php:308
1764
  msgid "Choose Image"
1765
  msgstr ""
1766
 
1767
- #: includes/class-scripts.php:309
1768
  msgid "Product title is required"
1769
  msgstr ""
1770
 
1771
- #: includes/class-scripts.php:310
1772
  msgid "Product category is required"
1773
  msgstr ""
1774
 
@@ -2028,177 +2116,177 @@ msgstr ""
2028
  msgid "Withdrawal request for {amount} is cancelled"
2029
  msgstr ""
2030
 
2031
- #: includes/functions.php:623 templates/products/new-product-single.php:580
2032
  msgid "Online"
2033
  msgstr ""
2034
 
2035
- #: includes/functions.php:624 templates/products/new-product-single.php:581
2036
  msgid "Draft"
2037
  msgstr ""
2038
 
2039
- #: includes/functions.php:625 templates/dashboard/products-widget.php:41
2040
  msgid "Pending Review"
2041
  msgstr ""
2042
 
2043
- #: includes/functions.php:667
2044
  msgid "Simple Product"
2045
  msgstr ""
2046
 
2047
- #: includes/functions.php:668
2048
  msgid "Variable Product"
2049
  msgstr ""
2050
 
2051
- #: includes/functions.php:669
2052
  msgid "Grouped Product"
2053
  msgstr ""
2054
 
2055
- #: includes/functions.php:670
2056
  msgid "Scheduled Product"
2057
  msgstr ""
2058
 
2059
- #: includes/functions.php:868
2060
  msgid "Author"
2061
  msgstr ""
2062
 
2063
- #: includes/functions.php:1057 includes/template-tags.php:308
2064
  #: templates/dashboard/products-widget.php:16
2065
  msgid "Products"
2066
  msgstr ""
2067
 
2068
- #: includes/functions.php:1104
2069
  msgid "Account Name: %s"
2070
  msgstr ""
2071
 
2072
- #: includes/functions.php:1108
2073
  msgid "Account Number: %s"
2074
  msgstr ""
2075
 
2076
- #: includes/functions.php:1112
2077
  msgid "Bank Name: %s"
2078
  msgstr ""
2079
 
2080
- #: includes/functions.php:1116
2081
  msgid "Address: %s"
2082
  msgstr ""
2083
 
2084
- #: includes/functions.php:1120
2085
  msgid "Routing Number: %s"
2086
  msgstr ""
2087
 
2088
- #: includes/functions.php:1124
2089
  msgid "IBAN: %s"
2090
  msgstr ""
2091
 
2092
- #: includes/functions.php:1128
2093
  msgid "SWIFT: %s"
2094
  msgstr ""
2095
 
2096
- #: includes/functions.php:1398
2097
  msgid "- Select a location -"
2098
  msgstr ""
2099
 
2100
- #: includes/functions.php:1402 includes/functions.php:1425
2101
  msgid "Everywhere Else"
2102
  msgstr ""
2103
 
2104
- #: includes/functions.php:1421
2105
  msgid "- Select a State -"
2106
  msgstr ""
2107
 
2108
- #: includes/functions.php:1443
2109
  msgid "Ready to ship in..."
2110
  msgstr ""
2111
 
2112
- #: includes/functions.php:1444
2113
  msgid "1 business day"
2114
  msgstr ""
2115
 
2116
- #: includes/functions.php:1445
2117
  msgid "1-2 business day"
2118
  msgstr ""
2119
 
2120
- #: includes/functions.php:1446
2121
  msgid "1-3 business day"
2122
  msgstr ""
2123
 
2124
- #: includes/functions.php:1447
2125
  msgid "3-5 business day"
2126
  msgstr ""
2127
 
2128
- #: includes/functions.php:1448
2129
  msgid "1-2 weeks"
2130
  msgstr ""
2131
 
2132
- #: includes/functions.php:1449
2133
  msgid "2-3 weeks"
2134
  msgstr ""
2135
 
2136
- #: includes/functions.php:1450
2137
  msgid "3-4 weeks"
2138
  msgstr ""
2139
 
2140
- #: includes/functions.php:1451
2141
  msgid "4-6 weeks"
2142
  msgstr ""
2143
 
2144
- #: includes/functions.php:1452
2145
  msgid "6-8 weeks"
2146
  msgstr ""
2147
 
2148
- #: includes/functions.php:1552
2149
  msgid "All dates"
2150
  msgstr ""
2151
 
2152
- #: includes/functions.php:1565
2153
  #. translators: 1: month name, 2: 4-digit year
2154
  msgid "%1$s %2$d"
2155
  msgstr ""
2156
 
2157
- #: includes/functions.php:1638
2158
  msgid "Google Plus"
2159
  msgstr ""
2160
 
2161
- #: includes/functions.php:1642
2162
  msgid "Twitter"
2163
  msgstr ""
2164
 
2165
- #: includes/functions.php:1646
2166
  msgid "Pinterest"
2167
  msgstr ""
2168
 
2169
- #: includes/functions.php:1650
2170
  msgid "LinkedIn"
2171
  msgstr ""
2172
 
2173
- #: includes/functions.php:1654
2174
  msgid "Youtube"
2175
  msgstr ""
2176
 
2177
- #: includes/functions.php:1658
2178
  msgid "Instagram"
2179
  msgstr ""
2180
 
2181
- #: includes/functions.php:1662
2182
  msgid "Flickr"
2183
  msgstr ""
2184
 
2185
- #: includes/functions.php:1905
2186
  msgid "Dokan Store Sidebar"
2187
  msgstr ""
2188
 
2189
- #: includes/order-functions.php:329
2190
  msgid "Mark parent order completed when all child orders are completed."
2191
  msgstr ""
2192
 
2193
- #: includes/order-functions.php:516
2194
  msgid "Pending Payment"
2195
  msgstr ""
2196
 
2197
- #: includes/order-functions.php:531 templates/dashboard/orders-widget.php:46
2198
  msgid "Refunded"
2199
  msgstr ""
2200
 
2201
- #: includes/order-functions.php:541
2202
  msgid "Failed"
2203
  msgstr ""
2204
 
@@ -2274,8 +2362,8 @@ msgid "Toggle &quot;Manage stock&quot;"
2274
  msgstr ""
2275
 
2276
  #: includes/product-functions.php:217
2277
- #: templates/products/products-listing.php:61
2278
- #: templates/products/products-listing.php:137
2279
  msgid "Stock"
2280
  msgstr ""
2281
 
@@ -2339,7 +2427,7 @@ msgstr[1] ""
2339
  msgid "Expand"
2340
  msgstr ""
2341
 
2342
- #: includes/product-functions.php:302 templates/orders/details.php:327
2343
  msgid "Close"
2344
  msgstr ""
2345
 
@@ -2384,7 +2472,20 @@ msgstr ""
2384
  msgid "Hidden"
2385
  msgstr ""
2386
 
2387
- #: includes/reports.php:337
 
 
 
 
 
 
 
 
 
 
 
 
 
2388
  msgid "Sales total"
2389
  msgstr ""
2390
 
@@ -2429,32 +2530,32 @@ msgstr ""
2429
  msgid "Refunded (%d)"
2430
  msgstr ""
2431
 
2432
- #: includes/template-tags.php:314 templates/dashboard/orders-widget.php:15
2433
  msgid "Orders"
2434
  msgstr ""
2435
 
2436
- #: includes/template-tags.php:329
2437
  msgid "Settings <i class=\"fa fa-angle-right pull-right\"></i>"
2438
  msgstr ""
2439
 
2440
- #: includes/template-tags.php:337
2441
  msgid "Back to Dashboard"
2442
  msgstr ""
2443
 
2444
- #: includes/template-tags.php:417 templates/settings/header.php:13
2445
  #: templates/store-lists-loop.php:61
2446
  msgid "Visit Store"
2447
  msgstr ""
2448
 
2449
- #: includes/template-tags.php:418 templates/global/header-menu.php:48
2450
  msgid "Edit Account"
2451
  msgstr ""
2452
 
2453
- #: includes/template-tags.php:419
2454
  msgid "Log out"
2455
  msgstr ""
2456
 
2457
- #: includes/wc-crud-functions.php:85 includes/wc-legacy-functions.php:61
2458
  msgid "Order &ndash; %s"
2459
  msgstr ""
2460
 
@@ -2462,77 +2563,63 @@ msgstr ""
2462
  msgid "Product SKU must be unique."
2463
  msgstr ""
2464
 
2465
- #: includes/wc-functions.php:472
2466
  msgid "Cheating, eh?"
2467
  msgstr ""
2468
 
2469
- #: includes/wc-functions.php:478
2470
  msgid "Please enter your first name."
2471
  msgstr ""
2472
 
2473
- #: includes/wc-functions.php:479
2474
  msgid "Please enter your last name."
2475
  msgstr ""
2476
 
2477
- #: includes/wc-functions.php:480
2478
  msgid "Please enter your phone number."
2479
  msgstr ""
2480
 
2481
- #: includes/wc-functions.php:815
2482
  msgid "Your {site_title} order receipt from {order_date}"
2483
  msgstr ""
2484
 
2485
- #: includes/wc-functions.php:816
2486
  msgid "Your {site_title} order from {order_date} is complete"
2487
  msgstr ""
2488
 
2489
- #: includes/wc-functions.php:913
2490
- #: templates/global/seller-registration-form.php:15
2491
- msgid "First Name"
2492
- msgstr ""
2493
-
2494
- #: includes/wc-functions.php:914
2495
- #: templates/global/seller-registration-form.php:20
2496
- msgid "Last Name"
2497
- msgstr ""
2498
-
2499
- #: includes/wc-functions.php:915 templates/dashboard/edit-account.php:62
2500
- msgid "Email address"
2501
- msgstr ""
2502
-
2503
- #: includes/wc-functions.php:920
2504
  msgid "is a required field."
2505
  msgstr ""
2506
 
2507
- #: includes/wc-functions.php:926
2508
  msgid "Please provide a valid email address."
2509
  msgstr ""
2510
 
2511
- #: includes/wc-functions.php:928
2512
  msgid "This email address is already registered."
2513
  msgstr ""
2514
 
2515
- #: includes/wc-functions.php:934
2516
  msgid "Your current password is incorrect."
2517
  msgstr ""
2518
 
2519
- #: includes/wc-functions.php:939
2520
  msgid "Please fill out all password fields."
2521
  msgstr ""
2522
 
2523
- #: includes/wc-functions.php:942
2524
  msgid "Please enter your current password."
2525
  msgstr ""
2526
 
2527
- #: includes/wc-functions.php:945
2528
  msgid "Please re-enter your password."
2529
  msgstr ""
2530
 
2531
- #: includes/wc-functions.php:948
2532
  msgid "New passwords do not match."
2533
  msgstr ""
2534
 
2535
- #: includes/wc-functions.php:969
2536
  msgid "Account details changed successfully."
2537
  msgstr ""
2538
 
@@ -2545,8 +2632,8 @@ msgid "Best Selling Product"
2545
  msgstr ""
2546
 
2547
  #: includes/widgets/bestselling-product.php:62
2548
- #: includes/widgets/menu-category.php:176 includes/widgets/store-contact.php:87
2549
- #: includes/widgets/store-location.php:94 includes/widgets/store-menu.php:101
2550
  #: includes/widgets/top-rated-product.php:61
2551
  msgid "Title:"
2552
  msgstr ""
@@ -2577,8 +2664,8 @@ msgstr ""
2577
  msgid "Dokan: Store Contact Form"
2578
  msgstr ""
2579
 
2580
- #: includes/widgets/store-contact.php:81 templates/store-toc.php:36
2581
- #: templates/store.php:41
2582
  msgid "Contact Vendor"
2583
  msgstr ""
2584
 
@@ -2591,7 +2678,7 @@ msgid "Dokan: Store Location"
2591
  msgstr ""
2592
 
2593
  #: includes/widgets/store-location.php:88 templates/store-toc.php:33
2594
- #: templates/store.php:37
2595
  msgid "Store Location"
2596
  msgstr ""
2597
 
@@ -2603,7 +2690,7 @@ msgstr ""
2603
  msgid "Dokan: Store Category Menu"
2604
  msgstr ""
2605
 
2606
- #: includes/widgets/store-menu.php:95
2607
  #: templates/products/new-product-single.php:261
2608
  #: templates/products/new-product-single.php:292
2609
  msgid "Category"
@@ -2629,35 +2716,35 @@ msgstr ""
2629
  msgid "Bank Transfer"
2630
  msgstr ""
2631
 
2632
- #: includes/withdraw-functions.php:98 includes/withdraw-functions.php:120
2633
  msgid "E-mail"
2634
  msgstr ""
2635
 
2636
- #: includes/withdraw-functions.php:145
2637
  msgid "Your bank account name"
2638
  msgstr ""
2639
 
2640
- #: includes/withdraw-functions.php:151
2641
  msgid "Your bank account number"
2642
  msgstr ""
2643
 
2644
- #: includes/withdraw-functions.php:157
2645
  msgid "Name of bank"
2646
  msgstr ""
2647
 
2648
- #: includes/withdraw-functions.php:163
2649
  msgid "Address of your bank"
2650
  msgstr ""
2651
 
2652
- #: includes/withdraw-functions.php:169
2653
  msgid "Routing number"
2654
  msgstr ""
2655
 
2656
- #: includes/withdraw-functions.php:175
2657
  msgid "IBAN"
2658
  msgstr ""
2659
 
2660
- #: includes/withdraw-functions.php:181
2661
  msgid "Swift code"
2662
  msgstr ""
2663
 
@@ -2735,18 +2822,6 @@ msgstr ""
2735
  msgid "Canel"
2736
  msgstr ""
2737
 
2738
- #: lib/class-weforms-upsell.php:77
2739
- msgid "Install Now"
2740
- msgstr ""
2741
-
2742
- #: lib/class-weforms-upsell.php:80 lib/class-weforms-upsell.php:81
2743
- msgid "Dismiss this notice."
2744
- msgstr ""
2745
-
2746
- #: lib/class-weforms-upsell.php:353
2747
- msgid "You don't have permission to install the plugins"
2748
- msgstr ""
2749
-
2750
  #: lib/class.dokan-settings-api.php:31
2751
  msgid "Active"
2752
  msgstr ""
@@ -2759,17 +2834,17 @@ msgstr ""
2759
  msgid "Choose File"
2760
  msgstr ""
2761
 
2762
- #: templates/dashboard/big-counter-widget.php:20
2763
  msgid "Sales"
2764
  msgstr ""
2765
 
2766
- #: templates/dashboard/big-counter-widget.php:24
2767
- #: templates/products/products-listing.php:63
2768
- #: templates/products/products-listing.php:159
2769
  msgid "Earning"
2770
  msgstr ""
2771
 
2772
- #: templates/dashboard/big-counter-widget.php:28
2773
  msgid "Pageview"
2774
  msgstr ""
2775
 
@@ -3054,20 +3129,6 @@ msgstr ""
3054
  msgid "Address:"
3055
  msgstr ""
3056
 
3057
- #: templates/global/seller-registration-form.php:26
3058
- msgid "Shop Name"
3059
- msgstr ""
3060
-
3061
- #: templates/global/seller-registration-form.php:31
3062
- msgid "Shop URL"
3063
- msgstr ""
3064
-
3065
- #: templates/global/seller-registration-form.php:52
3066
- msgid ""
3067
- "I have read and agree to the <a target=\"_blank\" href=\"%s\">Terms &amp; "
3068
- "Conditions</a>."
3069
- msgstr ""
3070
-
3071
  #: templates/global/seller-registration-form.php:65
3072
  msgid "I am a customer"
3073
  msgstr ""
@@ -3104,11 +3165,6 @@ msgstr ""
3104
  msgid "Pay"
3105
  msgstr ""
3106
 
3107
- #: templates/my-orders.php:88 templates/orders/listing.php:115
3108
- #: templates/products/products-listing.php:121 templates/sub-orders.php:59
3109
- msgid "View"
3110
- msgstr ""
3111
-
3112
  #: templates/my-orders.php:106
3113
  msgid "No orders found!"
3114
  msgstr ""
@@ -3121,11 +3177,11 @@ msgstr ""
3121
  msgid "Filter"
3122
  msgstr ""
3123
 
3124
- #: templates/orders/date-export.php:23
3125
  msgid "Export All"
3126
  msgstr ""
3127
 
3128
- #: templates/orders/date-export.php:24
3129
  msgid "Export Filtered"
3130
  msgstr ""
3131
 
@@ -3165,67 +3221,67 @@ msgstr ""
3165
  msgid "&nbsp; Edit"
3166
  msgstr ""
3167
 
3168
- #: templates/orders/details.php:185
3169
  msgid "Update"
3170
  msgstr ""
3171
 
3172
- #: templates/orders/details.php:191
3173
  msgid "Order Date:"
3174
  msgstr ""
3175
 
3176
- #: templates/orders/details.php:198
3177
  msgid "Customer:"
3178
  msgstr ""
3179
 
3180
- #: templates/orders/details.php:211
3181
  msgid "Email:"
3182
  msgstr ""
3183
 
3184
- #: templates/orders/details.php:215
3185
  msgid "Phone:"
3186
  msgstr ""
3187
 
3188
- #: templates/orders/details.php:219
3189
  msgid "Customer IP:"
3190
  msgstr ""
3191
 
3192
- #: templates/orders/details.php:231
3193
  msgid "Customer Note:"
3194
  msgstr ""
3195
 
3196
- #: templates/orders/details.php:266
3197
  msgid "added %s ago"
3198
  msgstr ""
3199
 
3200
- #: templates/orders/details.php:272
3201
  msgid "There are no notes for this order yet."
3202
  msgstr ""
3203
 
3204
- #: templates/orders/details.php:288
3205
  msgid "Customer note"
3206
  msgstr ""
3207
 
3208
- #: templates/orders/details.php:289
3209
  msgid "Private note"
3210
  msgstr ""
3211
 
3212
- #: templates/orders/details.php:297
3213
  msgid "Add Note"
3214
  msgstr ""
3215
 
3216
- #: templates/orders/details.php:303 templates/orders/details.php:312
3217
  msgid "Tracking Number"
3218
  msgstr ""
3219
 
3220
- #: templates/orders/details.php:307
3221
  msgid "Shipping Provider Name / URL"
3222
  msgstr ""
3223
 
3224
- #: templates/orders/details.php:317
3225
  msgid "Date Shipped"
3226
  msgstr ""
3227
 
3228
- #: templates/orders/details.php:318
3229
  #: templates/products/new-product-single.php:246
3230
  #: templates/products/new-product-single.php:253
3231
  #: templates/products/new-product.php:173
@@ -3235,7 +3291,7 @@ msgstr ""
3235
  msgid "YYYY-MM-DD"
3236
  msgstr ""
3237
 
3238
- #: templates/orders/details.php:326
3239
  msgid "Add Tracking Details"
3240
  msgstr ""
3241
 
@@ -3247,44 +3303,44 @@ msgstr ""
3247
  msgid "Grant Access"
3248
  msgstr ""
3249
 
3250
- #: templates/orders/listing.php:20 templates/orders/listing.php:40
3251
  msgid "Customer"
3252
  msgstr ""
3253
 
3254
- #: templates/orders/listing.php:22 templates/orders/listing.php:86
3255
  #: templates/products/new-product-single.php:530
3256
  msgid "Action"
3257
  msgstr ""
3258
 
3259
- #: templates/orders/listing.php:32
3260
  msgid "Order %s"
3261
  msgstr ""
3262
 
3263
- #: templates/orders/listing.php:61
3264
  msgid "Guest"
3265
  msgstr ""
3266
 
3267
- #: templates/orders/listing.php:70 templates/products/products-listing.php:199
3268
  msgid "Unpublished"
3269
  msgstr ""
3270
 
3271
- #: templates/orders/listing.php:72 templates/products/products-listing.php:202
3272
  msgid "Y/m/d g:i:s A"
3273
  msgstr ""
3274
 
3275
- #: templates/orders/listing.php:78 templates/products/products-listing.php:209
3276
  msgid "%s ago"
3277
  msgstr ""
3278
 
3279
- #: templates/orders/listing.php:80 templates/products/products-listing.php:211
3280
  msgid "Y/m/d"
3281
  msgstr ""
3282
 
3283
- #: templates/orders/listing.php:105
3284
  msgid "Complete"
3285
  msgstr ""
3286
 
3287
- #: templates/orders/listing.php:177
3288
  msgid "No orders found"
3289
  msgstr ""
3290
 
@@ -3361,7 +3417,7 @@ msgstr ""
3361
  msgid "Access Denied, No product found"
3362
  msgstr ""
3363
 
3364
- #: templates/products/new-product-single.php:14
3365
  msgid "Access Denied"
3366
  msgstr ""
3367
 
@@ -3411,7 +3467,7 @@ msgid ""
3411
  msgstr ""
3412
 
3413
  #: templates/products/new-product-single.php:196
3414
- #: templates/products/products-listing.php:180
3415
  msgid "Downloadable"
3416
  msgstr ""
3417
 
@@ -3420,7 +3476,7 @@ msgid "Downloadable products give access to a file upon purchase."
3420
  msgstr ""
3421
 
3422
  #: templates/products/new-product-single.php:201
3423
- #: templates/products/products-listing.php:178
3424
  msgid "Virtual"
3425
  msgstr ""
3426
 
@@ -3430,8 +3486,8 @@ msgstr ""
3430
 
3431
  #: templates/products/new-product-single.php:213
3432
  #: templates/products/new-product.php:147
3433
- #: templates/products/products-listing.php:62
3434
- #: templates/products/products-listing.php:150
3435
  #: templates/products/tmpl-add-product-popup.php:49
3436
  msgid "Price"
3437
  msgstr ""
@@ -3524,8 +3580,8 @@ msgid "Manage inventory for this product."
3524
  msgstr ""
3525
 
3526
  #: templates/products/new-product-single.php:438
3527
- #: templates/products/products-listing.php:60
3528
- #: templates/products/products-listing.php:128
3529
  msgid "SKU"
3530
  msgstr ""
3531
 
@@ -3582,8 +3638,8 @@ msgid "Add File"
3582
  msgstr ""
3583
 
3584
  #: templates/products/new-product-single.php:528
3585
- #: templates/products/products-listing.php:58
3586
- #: templates/products/products-listing.php:115
3587
  msgid "Name"
3588
  msgstr ""
3589
 
@@ -3669,82 +3725,74 @@ msgstr ""
3669
  msgid "Create Product"
3670
  msgstr ""
3671
 
3672
- #: templates/products/products-listing.php:41
3673
  msgid "Add new product"
3674
  msgstr ""
3675
 
3676
- #: templates/products/products-listing.php:57
3677
- #: templates/products/products-listing.php:112
3678
  msgid "Image"
3679
  msgstr ""
3680
 
3681
- #: templates/products/products-listing.php:64
3682
- #: templates/products/products-listing.php:168
3683
  msgid "Type"
3684
  msgstr ""
3685
 
3686
- #: templates/products/products-listing.php:65
3687
- #: templates/products/products-listing.php:193
3688
  msgid "Views"
3689
  msgstr ""
3690
 
3691
- #: templates/products/products-listing.php:119
3692
- msgid "Edit"
3693
- msgstr ""
3694
-
3695
- #: templates/products/products-listing.php:120
3696
- msgid "Delete Permanently"
3697
- msgstr ""
3698
-
3699
- #: templates/products/products-listing.php:140
3700
  msgid "In stock"
3701
  msgstr ""
3702
 
3703
- #: templates/products/products-listing.php:142
3704
  msgid "Out of stock"
3705
  msgstr ""
3706
 
3707
- #: templates/products/products-listing.php:172
3708
  msgid "Grouped"
3709
  msgstr ""
3710
 
3711
- #: templates/products/products-listing.php:174
3712
  msgid "External/Affiliate"
3713
  msgstr ""
3714
 
3715
- #: templates/products/products-listing.php:182
3716
  msgid "Simple"
3717
  msgstr ""
3718
 
3719
- #: templates/products/products-listing.php:186
3720
  msgid "Variable"
3721
  msgstr ""
3722
 
3723
- #: templates/products/products-listing.php:218
3724
  msgid "Published"
3725
  msgstr ""
3726
 
3727
- #: templates/products/products-listing.php:221
3728
  msgid "Missed schedule"
3729
  msgstr ""
3730
 
3731
- #: templates/products/products-listing.php:223
3732
  msgid "Scheduled"
3733
  msgstr ""
3734
 
3735
- #: templates/products/products-listing.php:226
3736
  msgid "Last Modified"
3737
  msgstr ""
3738
 
3739
- #: templates/products/products-listing.php:238
3740
  msgid "No product found"
3741
  msgstr ""
3742
 
3743
- #: templates/products/products-listing.php:261
3744
  msgid "&laquo; Previous"
3745
  msgstr ""
3746
 
3747
- #: templates/products/products-listing.php:262
3748
  msgid "Next &raquo;"
3749
  msgstr ""
3750
 
@@ -3796,63 +3844,63 @@ msgstr ""
3796
  msgid "State "
3797
  msgstr ""
3798
 
3799
- #: templates/settings/payment.php:39 templates/settings/store-form.php:226
3800
  msgid "Update Settings"
3801
  msgstr ""
3802
 
3803
- #: templates/settings/store-form.php:80
3804
  msgid "Upload a banner for your store. Banner size is (%sx%s) pixels."
3805
  msgstr ""
3806
 
3807
- #: templates/settings/store-form.php:93
3808
  msgid "Profile Picture"
3809
  msgstr ""
3810
 
3811
- #: templates/settings/store-form.php:103
3812
  msgid "Upload Photo"
3813
  msgstr ""
3814
 
3815
- #: templates/settings/store-form.php:109
3816
  msgid "Store Name"
3817
  msgstr ""
3818
 
3819
- #: templates/settings/store-form.php:112
3820
  msgid "store name"
3821
  msgstr ""
3822
 
3823
- #: templates/settings/store-form.php:140
3824
  msgid "Phone No"
3825
  msgstr ""
3826
 
3827
- #: templates/settings/store-form.php:142
3828
  msgid "+123456.."
3829
  msgstr ""
3830
 
3831
- #: templates/settings/store-form.php:159
3832
  msgid "More product"
3833
  msgstr ""
3834
 
3835
- #: templates/settings/store-form.php:164
3836
  msgid "Enable tab on product single page view"
3837
  msgstr ""
3838
 
3839
- #: templates/settings/store-form.php:172
3840
  msgid "Map"
3841
  msgstr ""
3842
 
3843
- #: templates/settings/store-form.php:179
3844
  msgid "Type an address to find"
3845
  msgstr ""
3846
 
3847
- #: templates/settings/store-form.php:180
3848
  msgid "Find Address"
3849
  msgstr ""
3850
 
3851
- #: templates/settings/store-form.php:198
3852
  msgid "Show terms and conditions in store page"
3853
  msgstr ""
3854
 
3855
- #: templates/settings/store-form.php:204
3856
  msgid "TOC Details"
3857
  msgstr ""
3858
 
@@ -3880,7 +3928,7 @@ msgstr ""
3880
  msgid "Search seller &hellip;"
3881
  msgstr ""
3882
 
3883
- #: templates/store-toc.php:31 templates/store.php:34
3884
  msgid "Store Category"
3885
  msgstr ""
3886
 
@@ -3888,7 +3936,7 @@ msgstr ""
3888
  msgid "Terms And Conditions"
3889
  msgstr ""
3890
 
3891
- #: templates/store.php:84
3892
  msgid "No products were found of this vendor!"
3893
  msgstr ""
3894
 
@@ -3927,18 +3975,28 @@ msgstr ""
3927
  msgid "No products found"
3928
  msgstr ""
3929
 
3930
- #: templates/withdraw/request-form.php:13
3931
  msgid "Withdraw Amount"
3932
  msgstr ""
3933
 
3934
- #: templates/withdraw/request-form.php:26
3935
  msgid "Payment Method"
3936
  msgstr ""
3937
 
3938
- #: templates/withdraw/request-form.php:41
3939
  msgid "Submit Request"
3940
  msgstr ""
3941
 
 
 
 
 
 
 
 
 
 
 
3942
  #: templates/withdraw/status-listing.php:12
3943
  msgid "Withdraw Request"
3944
  msgstr ""
@@ -4044,7 +4102,7 @@ msgctxt "Next post link"
4044
  msgid "&rarr;"
4045
  msgstr ""
4046
 
4047
- #: includes/wc-crud-functions.php:85 includes/wc-legacy-functions.php:61
4048
  msgctxt "Order date parsed by strftime"
4049
  msgid "%b %d, %Y @ %I:%M %p"
4050
  msgstr ""
1
+ # Copyright (C) 2018 weDevs
2
  # This file is distributed under the GPL2.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Dokan 2.7.8\n"
6
+ "Report-Msgid-Bugs-To: https://wedevs.com/contact/\n"
7
+ "POT-Creation-Date: 2018-03-05 06:38:16+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
+ "PO-Revision-Date: 2018-MO-DA HO:MI+ZONE\n"
12
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13
  "Language-Team: LANGUAGE <EMAIL@ADDRESS>\n"
14
+ "Language: en\n"
15
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
16
+ "X-Poedit-Country: United States\n"
17
+ "X-Poedit-SourceCharset: UTF-8\n"
18
+ "X-Poedit-KeywordsList: "
19
+ "__;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_"
20
+ "attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c;\n"
21
+ "X-Poedit-Basepath: ../\n"
22
+ "X-Poedit-SearchPath-0: .\n"
23
+ "X-Poedit-Bookmarks: \n"
24
+ "X-Textdomain-Support: yes\n"
25
+ "X-Generator: grunt-wp-i18n1.0.0\n"
26
 
27
  #: templates/products/new-product-single.php:461
28
  msgid "1"
29
  msgstr ""
30
 
31
+ #: classes/admin-user-profile.php:35 classes/ajax.php:135
32
+ #: includes/class-scripts.php:115
33
+ msgid "Available"
34
+ msgstr ""
35
+
36
+ #: classes/admin-user-profile.php:36 includes/class-scripts.php:116
37
+ msgid "Not Available"
38
+ msgstr ""
39
+
40
+ #: classes/admin-user-profile.php:83 classes/seller-setup-wizard.php:275
41
  msgid "Country"
42
  msgstr ""
43
 
44
+ #: classes/admin-user-profile.php:87
45
  msgid "Select a country&hellip;"
46
  msgstr ""
47
 
48
+ #: classes/admin-user-profile.php:90
49
  msgid "State/County"
50
  msgstr ""
51
 
52
+ #: classes/admin-user-profile.php:91
53
  msgid "State/County or state code"
54
  msgstr ""
55
 
56
+ #: classes/admin-user-profile.php:96
57
  msgid "Dokan Options"
58
  msgstr ""
59
 
60
+ #: classes/admin-user-profile.php:101
61
  msgid "Banner"
62
  msgstr ""
63
 
64
+ #: classes/admin-user-profile.php:113 templates/settings/store-form.php:69
65
  msgid "Upload banner"
66
  msgstr ""
67
 
68
+ #: classes/admin-user-profile.php:114
69
  msgid "(Upload a banner for your store. Banner size is (825x300) pixels. )"
70
  msgstr ""
71
 
72
+ #: classes/admin-user-profile.php:121
73
  msgid "Store name"
74
  msgstr ""
75
 
76
+ #: classes/admin-user-profile.php:128
77
+ msgid "Store URL"
78
+ msgstr ""
79
+
80
+ #: classes/admin-user-profile.php:136
81
  msgid "Address 1"
82
  msgstr ""
83
 
84
+ #: classes/admin-user-profile.php:143
85
  msgid "Address 2"
86
  msgstr ""
87
 
88
+ #: classes/admin-user-profile.php:150
89
  msgid "Town/City"
90
  msgstr ""
91
 
92
+ #: classes/admin-user-profile.php:157
93
  msgid "Zip Code"
94
  msgstr ""
95
 
96
+ #: classes/admin-user-profile.php:197 classes/pageviews.php:153
97
  #: templates/global/seller-registration-form.php:38
98
  msgid "Phone Number"
99
  msgstr ""
100
 
101
+ #: classes/admin-user-profile.php:215
102
  msgid "Payment Options : "
103
  msgstr ""
104
 
105
+ #: classes/admin-user-profile.php:220
106
  msgid "Paypal Email "
107
  msgstr ""
108
 
109
+ #: classes/admin-user-profile.php:228
110
  msgid "Skrill Email "
111
  msgstr ""
112
 
113
+ #: classes/admin-user-profile.php:237
114
  msgid "Bank name "
115
  msgstr ""
116
 
117
+ #: classes/admin-user-profile.php:243
118
  msgid "Account Name "
119
  msgstr ""
120
 
121
+ #: classes/admin-user-profile.php:249
122
  msgid "Account Number "
123
  msgstr ""
124
 
125
+ #: classes/admin-user-profile.php:255
126
  msgid "Bank Address "
127
  msgstr ""
128
 
129
+ #: classes/admin-user-profile.php:261
130
  msgid "Bank Swift "
131
  msgstr ""
132
 
133
+ #: classes/admin-user-profile.php:268 includes/admin/setup-wizard.php:88
134
  msgid "Selling"
135
  msgstr ""
136
 
137
+ #: classes/admin-user-profile.php:273
138
  msgid "Enable Adding Products"
139
  msgstr ""
140
 
141
+ #: classes/admin-user-profile.php:276
142
  msgid "Enable or disable product adding capability"
143
  msgstr ""
144
 
145
+ #: classes/admin-user-profile.php:281
146
  msgid "Publishing"
147
  msgstr ""
148
 
149
+ #: classes/admin-user-profile.php:286
150
  msgid "Publish product directly"
151
  msgstr ""
152
 
153
+ #: classes/admin-user-profile.php:289
154
  msgid "Bypass pending, publish products directly"
155
  msgstr ""
156
 
157
+ #: classes/admin-user-profile.php:294
158
  msgid "Admin Commission Type "
159
  msgstr ""
160
 
161
+ #: classes/admin-user-profile.php:297 includes/admin/class-settings.php:136
162
  msgid "Percentage"
163
  msgstr ""
164
 
165
+ #: classes/admin-user-profile.php:298 includes/admin/class-settings.php:135
166
  msgid "Flat"
167
  msgstr ""
168
 
169
+ #: classes/admin-user-profile.php:300
170
  msgid "Set the commmission type admin gets from this seller"
171
  msgstr ""
172
 
173
+ #: classes/admin-user-profile.php:304
174
  msgid "Admin Commission "
175
  msgstr ""
176
 
177
+ #: classes/admin-user-profile.php:308
178
  msgid "It will override the default commission admin gets from each sales"
179
  msgstr ""
180
 
181
+ #: classes/admin-user-profile.php:313
182
  msgid "Featured vendor"
183
  msgstr ""
184
 
185
+ #: classes/admin-user-profile.php:318
186
  msgid "Mark as featured vendor"
187
  msgstr ""
188
 
189
+ #: classes/admin-user-profile.php:321
190
  msgid "This vendor will be marked as a featured vendor."
191
  msgstr ""
192
 
193
+ #: classes/admin-withdraw.php:197
194
  msgid "Requests Deleted!"
195
  msgstr ""
196
 
197
+ #: classes/admin-withdraw.php:201
198
  msgid "Requests Cancelled!"
199
  msgstr ""
200
 
201
+ #: classes/admin-withdraw.php:205
202
  msgid "Requests Approved!"
203
  msgstr ""
204
 
205
+ #: classes/admin-withdraw.php:226 classes/admin-withdraw.php:240
206
  msgid "User Name"
207
  msgstr ""
208
 
209
+ #: classes/admin-withdraw.php:227 classes/admin-withdraw.php:241
210
  #: templates/withdraw/approved-request-listing.php:14
211
  #: templates/withdraw/cancelled-request-listing.php:14
212
  #: templates/withdraw/pending-request-listing.php:14
213
  msgid "Amount"
214
  msgstr ""
215
 
216
+ #: classes/admin-withdraw.php:228 classes/admin-withdraw.php:242
217
  #: templates/withdraw/approved-request-listing.php:15
218
  #: templates/withdraw/cancelled-request-listing.php:15
219
  #: templates/withdraw/pending-request-listing.php:15
220
  msgid "Method"
221
  msgstr ""
222
 
223
+ #: classes/admin-withdraw.php:229 classes/admin-withdraw.php:243
224
  msgid "Method Details"
225
  msgstr ""
226
 
227
+ #: classes/admin-withdraw.php:230 classes/admin-withdraw.php:244
228
  #: templates/withdraw/cancelled-request-listing.php:17
229
  msgid "Note"
230
  msgstr ""
231
 
232
+ #: classes/admin-withdraw.php:231 classes/admin-withdraw.php:245
233
  msgid "IP"
234
  msgstr ""
235
 
236
+ #: classes/admin-withdraw.php:232 classes/admin-withdraw.php:246
237
+ #: includes/admin-functions.php:44 includes/admin-functions.php:60
238
+ #: templates/my-orders.php:28 templates/orders/listing.php:21
239
+ #: templates/orders/listing.php:73 templates/products/products-listing.php:72
240
+ #: templates/products/products-listing.php:218 templates/sub-orders.php:26
241
  #: templates/withdraw/approved-request-listing.php:16
242
  #: templates/withdraw/cancelled-request-listing.php:16
243
  #: templates/withdraw/pending-request-listing.php:16
244
  msgid "Date"
245
  msgstr ""
246
 
247
+ #: classes/admin-withdraw.php:270 classes/admin-withdraw.php:280
248
  msgid "Approve"
249
  msgstr ""
250
 
251
+ #: classes/admin-withdraw.php:271 classes/admin-withdraw.php:275
252
  #: includes/product-functions.php:297 templates/my-orders.php:83
253
+ #: templates/orders/details.php:188
254
  #: templates/products/new-product-single.php:226
255
  #: templates/products/new-product.php:159
256
  #: templates/products/tmpl-add-product-popup.php:61
259
  msgid "Cancel"
260
  msgstr ""
261
 
262
+ #: classes/admin-withdraw.php:276 classes/admin-withdraw.php:281
263
  #: includes/admin/views/withdraw.php:14
264
  #: templates/dashboard/orders-widget.php:31
265
  msgid "Pending"
266
  msgstr ""
267
 
268
+ #: classes/admin-withdraw.php:286 classes/admin-withdraw.php:366
269
+ #: classes/ajax.php:448 includes/woo-views/html-product-download.php:18
270
  #: includes/woo-views/html-product-download.php:38
271
  msgid "Delete"
272
  msgstr ""
273
 
274
+ #: classes/admin-withdraw.php:310 templates/orders/details.php:287
275
  msgid "Add note"
276
  msgstr ""
277
 
278
+ #: classes/admin-withdraw.php:317
279
  msgid "Save"
280
  msgstr ""
281
 
282
+ #: classes/admin-withdraw.php:318
283
  msgid "cancel"
284
  msgstr ""
285
 
286
+ #: classes/admin-withdraw.php:334
287
  msgid "No results found"
288
  msgstr ""
289
 
290
+ #: classes/admin-withdraw.php:346
291
  msgid "Bulk Actions"
292
  msgstr ""
293
 
294
+ #: classes/admin-withdraw.php:350 classes/admin-withdraw.php:360
295
  msgid "Approve Requests"
296
  msgstr ""
297
 
298
+ #: classes/admin-withdraw.php:351 classes/admin-withdraw.php:355
299
  msgid "Mark as Cancelled"
300
  msgstr ""
301
 
302
+ #: classes/admin-withdraw.php:356 classes/admin-withdraw.php:361
303
  msgid "Mark Pending"
304
  msgstr ""
305
 
306
+ #: classes/admin-withdraw.php:367
307
  msgid "Download PayPal mass payment file"
308
  msgstr ""
309
 
310
+ #: classes/admin-withdraw.php:375
311
  msgid "Apply"
312
  msgstr ""
313
 
314
+ #: classes/admin-withdraw.php:384
315
  msgid "&laquo;"
316
  msgstr ""
317
 
318
+ #: classes/admin-withdraw.php:385
319
  msgid "&raquo;"
320
  msgstr ""
321
 
322
+ #: classes/ajax.php:80 classes/template-withdraw.php:194
323
+ #: classes/template-withdraw.php:223
324
+ msgid "You have no permission to do this action"
325
  msgstr ""
326
 
327
+ #: classes/ajax.php:100
328
+ msgid "Something wrong, please try again later"
329
  msgstr ""
330
 
331
+ #: classes/ajax.php:113 classes/template-settings.php:215
332
+ #: classes/template-settings.php:226 classes/template-settings.php:235
333
+ #: classes/template-settings.php:245 classes/template-settings.php:279
334
+ #: classes/template-settings.php:342 classes/template-settings.php:381
335
+ #: classes/template-settings.php:428 classes/template-withdraw.php:190
336
+ #: classes/template-withdraw.php:219
337
  msgid "Are you cheating?"
338
  msgstr ""
339
 
340
+ #: classes/ajax.php:151 classes/ajax.php:185
341
  msgid "You do not have sufficient permissions to access this page."
342
  msgstr ""
343
 
344
+ #: classes/ajax.php:155 classes/ajax.php:189
345
  msgid "You have taken too long. Please go back and retry."
346
  msgstr ""
347
 
348
+ #: classes/ajax.php:164 classes/ajax.php:198
349
  msgid "You do not have permission to change this order"
350
  msgstr ""
351
 
352
+ #: classes/ajax.php:249
353
  msgid "File %d"
354
  msgstr ""
355
 
356
+ #: classes/ajax.php:271
357
+ msgid "You have no permission to manage this order"
358
+ msgstr ""
359
+
360
  #: classes/ajax.php:307 classes/ajax.php:312
361
  msgid "Please provide your name."
362
  msgstr ""
369
  msgid "Email sent successfully!"
370
  msgstr ""
371
 
372
+ #: classes/ajax.php:380 templates/orders/details.php:271
373
  msgid "Delete note"
374
  msgstr ""
375
 
376
+ #: classes/ajax.php:490
377
  msgid "Error: Nonce verification failed"
378
  msgstr ""
379
 
380
+ #: classes/ajax.php:579
381
  msgid "Image could not be processed. Please go back and try again."
382
  msgstr ""
383
 
446
  msgstr ""
447
 
448
  #: classes/installer.php:135 includes/admin/class-settings.php:167
449
+ #: includes/admin/setup-wizard.php:264 includes/admin-functions.php:49
450
+ #: includes/admin-functions.php:63 includes/admin-functions.php:616
451
+ #: includes/admin-functions.php:640 includes/wc-template.php:14
452
+ #: includes/wc-template.php:139 templates/my-orders.php:31
453
  msgid "Vendor"
454
  msgstr ""
455
 
456
+ #: classes/installer.php:199 includes/admin/class-admin.php:209
457
+ #: includes/admin/class-settings.php:265 includes/template-tags.php:302
458
  msgid "Dashboard"
459
  msgstr ""
460
 
461
+ #: classes/installer.php:205
462
  msgid "Store List"
463
  msgstr ""
464
 
465
+ #: classes/installer.php:211 includes/admin/class-settings.php:271
466
  #: templates/global/header-menu.php:46
467
  msgid "My Orders"
468
  msgstr ""
469
 
470
+ #: classes/pageviews.php:88
471
+ msgid "You are already logged in"
472
+ msgstr ""
473
+
474
+ #: classes/pageviews.php:108
475
+ msgid "Username"
476
+ msgstr ""
477
+
478
+ #: classes/pageviews.php:114 includes/wc-functions.php:914
479
+ #: templates/dashboard/edit-account.php:62
480
+ msgid "Email address"
481
+ msgstr ""
482
+
483
+ #: classes/pageviews.php:121
484
+ msgid "Password"
485
+ msgstr ""
486
+
487
+ #: classes/pageviews.php:126
488
+ msgid "Anti-spam"
489
+ msgstr ""
490
+
491
+ #: classes/pageviews.php:130 includes/wc-functions.php:912
492
+ #: templates/global/seller-registration-form.php:15
493
+ msgid "First Name"
494
+ msgstr ""
495
+
496
+ #: classes/pageviews.php:135 includes/wc-functions.php:913
497
+ #: templates/global/seller-registration-form.php:20
498
+ msgid "Last Name"
499
+ msgstr ""
500
+
501
+ #: classes/pageviews.php:141 templates/global/seller-registration-form.php:26
502
+ msgid "Shop Name"
503
+ msgstr ""
504
+
505
+ #: classes/pageviews.php:146 templates/global/seller-registration-form.php:31
506
+ msgid "Shop URL"
507
+ msgstr ""
508
+
509
+ #: classes/pageviews.php:167 templates/global/seller-registration-form.php:52
510
+ msgid ""
511
+ "I have read and agree to the <a target=\"_blank\" href=\"%s\">Terms &amp; "
512
+ "Conditions</a>."
513
+ msgstr ""
514
+
515
+ #: classes/pageviews.php:176
516
+ msgid "Register"
517
+ msgstr ""
518
+
519
  #: classes/seller-setup-wizard.php:63 includes/admin/setup-wizard.php:78
520
  msgid "Introduction"
521
  msgstr ""
522
 
523
  #: classes/seller-setup-wizard.php:68 includes/admin/setup-wizard.php:83
524
+ #: includes/template-tags.php:347
525
  msgid "Store"
526
  msgstr ""
527
 
528
+ #: classes/seller-setup-wizard.php:73 includes/template-tags.php:354
529
  msgid "Payment"
530
  msgstr ""
531
 
537
  msgid "Vendor &rsaquo; Setup Wizard"
538
  msgstr ""
539
 
540
+ #: classes/seller-setup-wizard.php:200
541
  msgid "Return to the Marketplace"
542
  msgstr ""
543
 
544
+ #: classes/seller-setup-wizard.php:213
545
  msgid "Welcome to the Marketplace!"
546
  msgstr ""
547
 
548
+ #: classes/seller-setup-wizard.php:214
549
  msgid ""
550
  "Thank you for choosing The Marketplace to power your online store! This "
551
  "quick setup wizard will help you configure the basic settings. <strong>It’s "
552
  "completely optional and shouldn’t take longer than two minutes.</strong>"
553
  msgstr ""
554
 
555
+ #: classes/seller-setup-wizard.php:215
556
  msgid ""
557
  "No time right now? If you don’t want to go through the wizard, you can skip "
558
  "and return to the Store!"
559
  msgstr ""
560
 
561
+ #: classes/seller-setup-wizard.php:217 includes/admin/setup-wizard.php:249
562
  msgid "Let's Go!"
563
  msgstr ""
564
 
565
+ #: classes/seller-setup-wizard.php:218 includes/admin/setup-wizard.php:250
566
  msgid "Not right now"
567
  msgstr ""
568
 
569
+ #: classes/seller-setup-wizard.php:243 includes/admin/setup-wizard.php:268
570
  msgid "Store Setup"
571
  msgstr ""
572
 
573
+ #: classes/seller-setup-wizard.php:247 templates/settings/store-form.php:119
574
  msgid "Store Product Per Page"
575
  msgstr ""
576
 
577
+ #: classes/seller-setup-wizard.php:253
578
  msgid "Street"
579
  msgstr ""
580
 
581
+ #: classes/seller-setup-wizard.php:259 templates/settings/address-form.php:44
582
  msgid "Street 2"
583
  msgstr ""
584
 
585
+ #: classes/seller-setup-wizard.php:265 templates/settings/address-form.php:60
586
  msgid "City"
587
  msgstr ""
588
 
589
+ #: classes/seller-setup-wizard.php:270
590
  msgid "Post/Zip Code"
591
  msgstr ""
592
 
593
+ #: classes/seller-setup-wizard.php:282
594
  msgid "State"
595
  msgstr ""
596
 
597
+ #: classes/seller-setup-wizard.php:284
598
  msgid "State Name"
599
  msgstr ""
600
 
601
+ #: classes/seller-setup-wizard.php:288 templates/settings/store-form.php:149
602
  msgid "Email"
603
  msgstr ""
604
 
605
+ #: classes/seller-setup-wizard.php:291 templates/settings/store-form.php:154
606
  msgid "Show email address in store"
607
  msgstr ""
608
 
 
 
 
 
 
 
609
  #: classes/seller-setup-wizard.php:299 classes/seller-setup-wizard.php:438
610
  #: includes/admin/setup-wizard.php:294 includes/admin/setup-wizard.php:374
611
  #: includes/admin/setup-wizard.php:485
612
+ msgid "Continue"
613
+ msgstr ""
614
+
615
+ #: classes/seller-setup-wizard.php:300 classes/seller-setup-wizard.php:439
616
+ #: includes/admin/setup-wizard.php:295 includes/admin/setup-wizard.php:375
617
+ #: includes/admin/setup-wizard.php:486
618
  msgid "Skip this step"
619
  msgstr ""
620
 
621
+ #: classes/seller-setup-wizard.php:319
622
  msgid "Select an option&hellip;"
623
  msgstr ""
624
 
625
+ #: classes/seller-setup-wizard.php:414
626
  msgid "Payment Setup"
627
  msgstr ""
628
 
634
  msgid "Go to your Store Dashboard!"
635
  msgstr ""
636
 
637
+ #: classes/template-orders.php:80
638
+ msgid "You have no permission to view this order"
639
+ msgstr ""
640
+
641
+ #: classes/template-orders.php:116 classes/template-orders.php:185
642
  msgid "Order No"
643
  msgstr ""
644
 
645
+ #: classes/template-orders.php:117 classes/template-orders.php:186
646
  #: templates/orders/details.php:21
647
  msgid "Order Items"
648
  msgstr ""
649
 
650
+ #: classes/template-orders.php:118 classes/template-orders.php:187
651
  msgid "Shipping method"
652
  msgstr ""
653
 
654
+ #: classes/template-orders.php:119 classes/template-orders.php:188
655
  msgid "Shipping Cost"
656
  msgstr ""
657
 
658
+ #: classes/template-orders.php:120 classes/template-orders.php:189
659
  msgid "Payment method"
660
  msgstr ""
661
 
662
+ #: classes/template-orders.php:121 classes/template-orders.php:190
663
+ #: templates/orders/listing.php:18 templates/orders/listing.php:40
664
  msgid "Order Total"
665
  msgstr ""
666
 
667
+ #: classes/template-orders.php:122 classes/template-orders.php:191
668
  msgid "Order Status"
669
  msgstr ""
670
 
671
+ #: classes/template-orders.php:123 classes/template-orders.php:192
672
  msgid "Order Date"
673
  msgstr ""
674
 
675
+ #: classes/template-orders.php:124 classes/template-orders.php:193
676
  msgid "Customer Name"
677
  msgstr ""
678
 
679
+ #: classes/template-orders.php:125 classes/template-orders.php:194
680
  msgid "Customer Email"
681
  msgstr ""
682
 
683
+ #: classes/template-orders.php:126 classes/template-orders.php:195
684
  msgid "Customer Phone"
685
  msgstr ""
686
 
687
+ #: classes/template-orders.php:127 classes/template-orders.php:196
688
  msgid "Customer IP"
689
  msgstr ""
690
 
691
+ #: classes/template-products.php:74 classes/template-settings.php:149
692
+ #: classes/template-settings.php:157 classes/template-shortcodes.php:54
693
+ #: templates/global/no-permission.php:50
694
+ msgid "You have no permission to view this page"
695
+ msgstr ""
696
+
697
+ #: classes/template-products.php:110
698
  msgid "Details of your product ..."
699
  msgstr ""
700
 
701
+ #: classes/template-products.php:119 classes/template-products.php:245
702
  #: includes/product-functions.php:32
703
  msgid "Please enter product title"
704
  msgstr ""
705
 
706
+ #: classes/template-products.php:125 classes/template-products.php:251
707
  #: includes/product-functions.php:38
708
  msgid "Please select a category"
709
  msgstr ""
710
 
711
+ #: classes/template-products.php:129 classes/template-products.php:255
712
  #: includes/product-functions.php:42
713
  msgid "Please select AT LEAST ONE category"
714
  msgstr ""
715
 
716
+ #: classes/template-products.php:262
717
  msgid "No product found !"
718
  msgstr ""
719
 
720
  #: classes/template-settings.php:70 classes/template-settings.php:74
721
+ #: dokan.php:408 includes/admin/class-admin.php:216
722
+ #: includes/admin/class-admin.php:238 includes/admin/class-admin.php:370
723
  #: includes/admin/views/welcome.php:20
724
  msgid "Settings"
725
  msgstr ""
735
  "payments seamlessly."
736
  msgstr ""
737
 
738
+ #: classes/template-settings.php:223
739
+ msgid "Pemission denied social"
740
+ msgstr ""
741
+
742
+ #: classes/template-settings.php:232 classes/template-settings.php:241
743
+ msgid "Pemission denied"
744
+ msgstr ""
745
+
746
+ #: classes/template-settings.php:258
747
  msgid "Your information has been saved successfully"
748
  msgstr ""
749
 
750
+ #: classes/template-settings.php:288 classes/template-settings.php:389
751
  msgid "Store name required"
752
  msgstr ""
753
 
754
+ #: classes/template-settings.php:294 classes/template-settings.php:350
755
+ #: classes/template-settings.php:395
756
  msgid "Store type required"
757
  msgstr ""
758
 
759
+ #: classes/template-settings.php:301 classes/template-settings.php:358
760
+ #: classes/template-settings.php:402 classes/template-settings.php:437
761
  msgid "Invalid email"
762
  msgstr ""
763
 
764
+ #: classes/template-settings.php:318
765
  msgid "Address field for %s is required"
766
  msgstr ""
767
 
768
+ #: classes/template-settings.php:588
769
  msgid "Add Profile Picture to gain %s%% progress"
770
  msgstr ""
771
 
772
+ #: classes/template-settings.php:607 includes/functions.php:1709
773
  msgid "Facebook"
774
  msgstr ""
775
 
776
+ #: classes/template-settings.php:607
777
  msgid "Google+"
778
  msgstr ""
779
 
780
+ #: classes/template-settings.php:608
781
  msgid "Add %s profile link to gain %s%% progress"
782
  msgstr ""
783
 
784
+ #: classes/template-settings.php:622
785
  msgid "Add Phone to gain %s%% progress"
786
  msgstr ""
787
 
788
+ #: classes/template-settings.php:635
789
  msgid "Add Banner to gain %s%% progress"
790
  msgstr ""
791
 
792
+ #: classes/template-settings.php:647
793
  msgid "Add Store Name to gain %s%% progress"
794
  msgstr ""
795
 
796
+ #: classes/template-settings.php:659
797
  msgid "Add address to gain %s%% progress"
798
  msgstr ""
799
 
800
+ #: classes/template-settings.php:707
801
  msgid "Add a Payment method to gain %s%% progress"
802
  msgstr ""
803
 
804
+ #: classes/template-settings.php:715
805
  msgid "Add Map location to gain %s%% progress"
806
  msgstr ""
807
 
808
+ #: classes/template-settings.php:735
809
  msgid "Book"
810
  msgstr ""
811
 
812
+ #: classes/template-settings.php:736
813
  msgid "Dress"
814
  msgstr ""
815
 
816
+ #: classes/template-settings.php:737
817
  msgid "Electronic"
818
  msgstr ""
819
 
821
  msgid "Please install <a href=\"%s\"><strong>WooCommerce</strong></a> plugin first"
822
  msgstr ""
823
 
824
+ #: classes/template-withdraw.php:80
825
+ msgid "You have no permission to manage withdraws"
826
+ msgstr ""
827
+
828
+ #: classes/template-withdraw.php:133
829
  msgid "Current Balance: %s "
830
  msgstr ""
831
 
832
+ #: classes/template-withdraw.php:136
833
  msgid "<br>Minimum Withdraw amount: %s "
834
  msgstr ""
835
 
836
+ #: classes/template-withdraw.php:139
837
  msgid "<br>Withdraw Threshold: %d days "
838
  msgstr ""
839
 
840
+ #: classes/template-withdraw.php:232
841
  msgid "Withdraw amount required "
842
  msgstr ""
843
 
844
+ #: classes/template-withdraw.php:235
845
  msgid "You don't have enough balance for this request"
846
  msgstr ""
847
 
848
+ #: classes/template-withdraw.php:237
849
  msgid "Withdraw amount must be greater than %d"
850
  msgstr ""
851
 
852
+ #: classes/template-withdraw.php:241
853
  msgid "withdraw method required"
854
  msgstr ""
855
 
856
+ #: classes/template-withdraw.php:319
857
  msgid "Your request has been cancelled successfully!"
858
  msgstr ""
859
 
860
+ #: classes/template-withdraw.php:323
861
  msgid "Your request has been received successfully and being reviewed!"
862
  msgstr ""
863
 
864
+ #: classes/template-withdraw.php:327
865
  msgid "Unknown error!"
866
  msgstr ""
867
 
868
+ #: classes/template-withdraw.php:359
869
  msgid "You already withdrawed %s. This amount will deducted from your balance."
870
  msgstr ""
871
 
872
+ #: classes/template-withdraw.php:368
873
  msgid "You already have pending withdraw request(s)."
874
  msgstr ""
875
 
876
+ #: classes/template-withdraw.php:368
877
  msgid ""
878
  "Please submit your request after approval or cancellation of your previous "
879
  "request."
880
  msgstr ""
881
 
882
+ #: classes/template-withdraw.php:383
883
  msgid "You don't have sufficient balance for a withdraw request!"
884
  msgstr ""
885
 
886
+ #: classes/template-withdraw.php:429 classes/template-withdraw.php:459
887
  msgid "Sorry, no transactions were found!"
888
  msgstr ""
889
 
894
  "<strong>20% discount</strong> on upgrades and add-on purchase."
895
  msgstr ""
896
 
897
+ #: classes/upgrade.php:78 includes/admin/class-admin.php:433
898
  msgid ""
899
  "<strong>Dokan Data Update Required</strong> &#8211; We need to update your "
900
  "install to the latest version"
901
  msgstr ""
902
 
903
+ #: classes/upgrade.php:79 includes/admin/class-admin.php:434
904
  msgid "Run the updater"
905
  msgstr ""
906
 
907
+ #: classes/upgrade.php:84 includes/admin/class-admin.php:439
908
  msgid ""
909
  "It is strongly recommended that you backup your database before proceeding. "
910
  "Are you sure you wish to run the updater now?"
911
  msgstr ""
912
 
913
+ #: classes/withdraw.php:243 templates/withdraw/pending-request-listing.php:41
914
  msgid "Pending Reivew"
915
  msgstr ""
916
 
917
+ #: classes/withdraw.php:247 templates/withdraw/pending-request-listing.php:43
918
  msgid "Accepted"
919
  msgstr ""
920
 
921
+ #: dokan.php:173
922
  msgid "<b>Dokan</b> requires %sWooCommerce%s to be installed & activated!"
923
  msgstr ""
924
 
925
+ #: dokan.php:405
926
  msgid "Get Pro"
927
  msgstr ""
928
 
929
+ #: dokan.php:409 includes/admin/views/welcome.php:21
930
  msgid "Documentation"
931
  msgstr ""
932
 
999
  msgstr ""
1000
 
1001
  #: includes/admin/class-admin.php:62
 
 
 
 
 
 
 
 
1002
  msgid ""
1003
+ "<h2>\n"
1004
+ " Dokan is Getting More Affordable: Price Reduction & "
1005
+ "Changes in Packages\n"
1006
+ " </h2>"
1007
  msgstr ""
1008
 
1009
  #: includes/admin/class-admin.php:65
1010
  msgid ""
1011
+ "<p>Marketplaces are changing, so is Dokan Multivendor. We are reducing "
1012
+ "Dokan Pro entry package price and bringing entirely new pricing where you "
1013
+ "get addons pre-activated for free depending on your package.</p>"
 
1014
  msgstr ""
1015
 
1016
+ #: includes/admin/class-admin.php:71
1017
+ msgid "View Package"
1018
+ msgstr ""
1019
+
1020
+ #: includes/admin/class-admin.php:202 includes/admin/class-admin.php:210
1021
+ #: includes/admin/class-admin.php:356 includes/admin/setup-wizard.php:93
1022
+ #: includes/admin/views/dashboard.php:72 includes/template-tags.php:324
1023
  #: templates/withdraw/header.php:11
1024
  msgid "Withdraw"
1025
  msgstr ""
1026
 
1027
+ #: includes/admin/class-admin.php:205
1028
  msgid "Withdraw %s"
1029
  msgstr ""
1030
 
1032
  msgid "Dokan"
1033
  msgstr ""
1034
 
1035
+ #: includes/admin/class-admin.php:209 includes/admin/class-admin.php:349
1036
  #: includes/admin/views/dashboard.php:96
1037
  msgid "Dokan Dashboard"
1038
  msgstr ""
1039
 
1040
+ #: includes/admin/class-admin.php:211 includes/admin/class-admin.php:363
1041
  msgid "PRO Features"
1042
  msgstr ""
1043
 
1044
+ #: includes/admin/class-admin.php:215
1045
  msgid "Help"
1046
  msgstr ""
1047
 
1048
+ #: includes/admin/class-admin.php:215
1049
  msgid "<span style=\"color:#f18500\">Help</span>"
1050
  msgstr ""
1051
 
1052
+ #: includes/admin/class-admin.php:223 includes/admin/views/welcome.php:12
 
 
 
 
 
 
 
 
1053
  msgid "Welcome to Dokan"
1054
  msgstr ""
1055
 
1077
  msgid "Disable Vendors and Customers from accessing the wp-admin dashboard area"
1078
  msgstr ""
1079
 
1080
+ #: includes/admin/class-settings.php:150 includes/admin/setup-wizard.php:272
1081
  msgid "Vendor Store URL"
1082
  msgstr ""
1083
 
1085
  msgid "Define the seller store URL (%s<strong>[this-text]</strong>/[seller-name])"
1086
  msgstr ""
1087
 
1088
+ #: includes/admin/class-settings.php:157 includes/functions.php:1093
1089
+ #: templates/settings/store-form.php:196
1090
  msgid "Terms and Conditions"
1091
  msgstr ""
1092
 
1094
  msgid "Enable Terms and Conditions for vendor stores"
1095
  msgstr ""
1096
 
1097
+ #: includes/admin/class-settings.php:164 includes/admin/setup-wizard.php:279
1098
  msgid "Extra Fee Recipient"
1099
  msgstr ""
1100
 
1102
  msgid "Should extra fees, such as Shipping and Tax, go to the Vendor or the Admin?"
1103
  msgstr ""
1104
 
1105
+ #: includes/admin/class-settings.php:167 includes/admin/setup-wizard.php:265
1106
  msgid "Admin"
1107
  msgstr ""
1108
 
1164
  msgid "Amount you get from sales"
1165
  msgstr ""
1166
 
1167
+ #: includes/admin/class-settings.php:225 includes/admin/setup-wizard.php:352
1168
  msgid "Order Status Change"
1169
  msgstr ""
1170
 
1171
+ #: includes/admin/class-settings.php:226
1172
  msgid "Vendor can update order status"
1173
  msgstr ""
1174
 
1175
+ #: includes/admin/class-settings.php:232
1176
  msgid "Disable Product Popup"
1177
  msgstr ""
1178
 
1179
+ #: includes/admin/class-settings.php:233
1180
  msgid "Disable add new product in popup view"
1181
  msgstr ""
1182
 
1183
+ #: includes/admin/class-settings.php:239
1184
  msgid "Disable Welcome Wizard"
1185
  msgstr ""
1186
 
1187
+ #: includes/admin/class-settings.php:240
1188
  msgid "Disable welcome wizard for newly registered vendors"
1189
  msgstr ""
1190
 
1191
+ #: includes/admin/class-settings.php:248 includes/admin/setup-wizard.php:414
1192
  msgid "Withdraw Methods"
1193
  msgstr ""
1194
 
1195
+ #: includes/admin/class-settings.php:249
1196
  msgid "Withdraw methods for vendors"
1197
  msgstr ""
1198
 
1199
+ #: includes/admin/class-settings.php:256 includes/admin/setup-wizard.php:467
1200
  msgid "Minimum Withdraw Limit"
1201
  msgstr ""
1202
 
1203
+ #: includes/admin/class-settings.php:257
1204
  msgid ""
1205
  "Minimum balance required to make a withdraw request. Leave blank to set no "
1206
  "minimum limits."
1207
  msgstr ""
1208
 
1209
+ #: includes/admin/class-settings.php:277
1210
  msgid "Terms and Conditions Page"
1211
  msgstr ""
1212
 
1213
+ #: includes/admin/class-settings.php:280
1214
  msgid ""
1215
  "Select where you want to add Dokan pages <a target=\"_blank\" href=\"%s\"> "
1216
  "Learn More </a>"
1217
  msgstr ""
1218
 
1219
+ #: includes/admin/class-settings.php:286
1220
  msgid "Vendor Setup Wizard Logo"
1221
  msgstr ""
1222
 
1223
+ #: includes/admin/class-settings.php:288
1224
  msgid ""
1225
  "Recommended Logo size ( 270px X 90px ). If no logo is uploaded, site title "
1226
  "is shown by default."
1227
  msgstr ""
1228
 
1229
+ #: includes/admin/class-settings.php:292
1230
  msgid "Store Header Template"
1231
  msgstr ""
1232
 
1234
  msgid "Dokan &rsaquo; Setup Wizard"
1235
  msgstr ""
1236
 
1237
+ #: includes/admin/setup-wizard.php:203
1238
  msgid "Return to the WordPress Dashboard"
1239
  msgstr ""
1240
 
1241
+ #: includes/admin/setup-wizard.php:245
1242
  msgid "Welcome to the world of Dokan!"
1243
  msgstr ""
1244
 
1245
+ #: includes/admin/setup-wizard.php:246
1246
  msgid ""
1247
  "Thank you for choosing Dokan to power your online marketplace! This quick "
1248
  "setup wizard will help you configure the basic settings. <strong>It’s "
1249
  "completely optional and shouldn’t take longer than three minutes.</strong>"
1250
  msgstr ""
1251
 
1252
+ #: includes/admin/setup-wizard.php:247
1253
  msgid ""
1254
  "No time right now? If you don’t want to go through the wizard, you can skip "
1255
  "and return to the WordPress dashboard. Come back anytime if you change your "
1256
  "mind!"
1257
  msgstr ""
1258
 
1259
+ #: includes/admin/setup-wizard.php:275
1260
  msgid "Define vendor store URL"
1261
  msgstr ""
1262
 
1263
+ #: includes/admin/setup-wizard.php:289
1264
  msgid "Extra fees like shipping and tax will go to"
1265
  msgstr ""
1266
 
1267
+ #: includes/admin/setup-wizard.php:329
1268
  msgid "Tab View"
1269
  msgstr ""
1270
 
1271
+ #: includes/admin/setup-wizard.php:330
1272
  msgid "Flat View"
1273
  msgstr ""
1274
 
1275
+ #: includes/admin/setup-wizard.php:334
1276
  msgid "Selling Setup"
1277
  msgstr ""
1278
 
1279
+ #: includes/admin/setup-wizard.php:338
1280
  msgid "New Vendor Enable Selling"
1281
  msgstr ""
1282
 
1283
+ #: includes/admin/setup-wizard.php:341
1284
  msgid "Make selling status enable for new registred vendor"
1285
  msgstr ""
1286
 
1287
+ #: includes/admin/setup-wizard.php:345
1288
  msgid "Vendor Commission %"
1289
  msgstr ""
1290
 
1291
+ #: includes/admin/setup-wizard.php:348
1292
  msgid "How much amount (%) a vendor will get from each order"
1293
  msgstr ""
1294
 
1295
+ #: includes/admin/setup-wizard.php:355
1296
  msgid "Vendor can change order status"
1297
  msgstr ""
1298
 
1299
+ #: includes/admin/setup-wizard.php:359
1300
  msgid "Add/Edit Product Style"
1301
  msgstr ""
1302
 
1303
+ #: includes/admin/setup-wizard.php:369
1304
  msgid "The style you prefer for vendor to add or edit products."
1305
  msgstr ""
1306
 
1307
+ #: includes/admin/setup-wizard.php:410
1308
  msgid "Withdraw Setup"
1309
  msgstr ""
1310
 
1311
+ #: includes/admin/setup-wizard.php:421
1312
  msgid "Paypal"
1313
  msgstr ""
1314
 
1315
+ #: includes/admin/setup-wizard.php:424
1316
  msgid "Enable paypal for your vendor as a withdraw method"
1317
  msgstr ""
1318
 
1319
+ #: includes/admin/setup-wizard.php:436
1320
  msgid "Bank"
1321
  msgstr ""
1322
 
1323
+ #: includes/admin/setup-wizard.php:439
1324
  msgid "Enable bank transfer for your vendor as a withdraw method"
1325
  msgstr ""
1326
 
1327
+ #: includes/admin/setup-wizard.php:451
1328
  msgid "Skrill"
1329
  msgstr ""
1330
 
1331
+ #: includes/admin/setup-wizard.php:454
1332
  msgid "Enable skrill for your vendor as a withdraw method"
1333
  msgstr ""
1334
 
1335
+ #: includes/admin/setup-wizard.php:470
1336
  msgid ""
1337
  "Minimum balance required to make a withdraw request ( Leave it blank to set "
1338
  "no limits )"
1339
  msgstr ""
1340
 
1341
+ #: includes/admin/setup-wizard.php:474
1342
  msgid "Order Status for Withdraw"
1343
  msgstr ""
1344
 
1345
+ #: includes/admin/setup-wizard.php:476 includes/order-functions.php:518
1346
  #: templates/dashboard/orders-widget.php:26
1347
  msgid "Completed"
1348
  msgstr ""
1349
 
1350
+ #: includes/admin/setup-wizard.php:477 includes/order-functions.php:533
1351
+ #: templates/dashboard/orders-widget.php:36 templates/orders/listing.php:103
1352
  msgid "Processing"
1353
  msgstr ""
1354
 
1355
+ #: includes/admin/setup-wizard.php:478 includes/order-functions.php:528
1356
  msgid "On-hold"
1357
  msgstr ""
1358
 
1359
+ #: includes/admin/setup-wizard.php:480
1360
  msgid "Order status for which vendor can make a withdraw request."
1361
  msgstr ""
1362
 
1363
+ #: includes/admin/setup-wizard.php:516
1364
  msgid "Your Marketplace is Ready!"
1365
  msgstr ""
1366
 
1367
+ #: includes/admin/setup-wizard.php:520
1368
  msgid "Next Steps"
1369
  msgstr ""
1370
 
1371
+ #: includes/admin/setup-wizard.php:522
1372
  msgid "Setup your dokan!"
1373
  msgstr ""
1374
 
1375
+ #: includes/admin/setup-wizard.php:526
1376
  msgid "Learn More"
1377
  msgstr ""
1378
 
1515
  msgid "Approved"
1516
  msgstr ""
1517
 
1518
+ #: includes/admin/views/withdraw.php:24 includes/order-functions.php:543
1519
  #: templates/dashboard/orders-widget.php:41
1520
  msgid "Cancelled"
1521
  msgstr ""
1522
 
1523
+ #: includes/admin-functions.php:43 includes/admin-functions.php:55
1524
+ #: templates/dashboard/big-counter-widget.php:29 templates/my-orders.php:27
 
 
 
 
 
 
 
 
1525
  #: templates/orders/details.php:21 templates/orders/listing.php:17
1526
+ #: templates/orders/listing.php:33 templates/sub-orders.php:25
1527
  msgid "Order"
1528
  msgstr ""
1529
 
1530
+ #: includes/admin-functions.php:45 includes/admin-functions.php:54
1531
+ #: includes/product-functions.php:201 templates/my-orders.php:29
1532
+ #: templates/orders/listing.php:19 templates/orders/listing.php:43
1533
+ #: templates/products/products-listing.php:65
1534
+ #: templates/products/products-listing.php:147 templates/sub-orders.php:27
1535
+ #: templates/withdraw/pending-request-listing.php:18
1536
+ msgid "Status"
1537
  msgstr ""
1538
 
1539
+ #: includes/admin-functions.php:46
1540
+ msgid "Billing"
1541
  msgstr ""
1542
 
1543
+ #: includes/admin-functions.php:47 includes/admin-functions.php:57
1544
+ msgid "Ship to"
 
 
 
 
1545
  msgstr ""
1546
 
1547
+ #: includes/admin-functions.php:48 includes/admin-functions.php:61
1548
+ #: templates/dashboard/orders-widget.php:21
1549
  #: templates/dashboard/products-widget.php:26 templates/my-orders.php:30
1550
  #: templates/orders/order-fee-html.php:17 templates/sub-orders.php:28
1551
  msgid "Total"
1552
  msgstr ""
1553
 
1554
+ #: includes/admin-functions.php:50 includes/admin-functions.php:62
1555
  msgid "Actions"
1556
  msgstr ""
1557
 
1558
+ #: includes/admin-functions.php:51 includes/admin-functions.php:64
1559
  msgid "Sub Order"
1560
  msgstr ""
1561
 
1562
+ #: includes/admin-functions.php:56
1563
+ msgid "Purchased"
1564
+ msgstr ""
1565
+
1566
+ #: includes/admin-functions.php:58
1567
+ msgid "Customer Message"
1568
+ msgstr ""
1569
+
1570
+ #: includes/admin-functions.php:59 templates/orders/details.php:245
1571
+ msgid "Order Notes"
1572
+ msgstr ""
1573
+
1574
+ #: includes/admin-functions.php:91
1575
  msgid "Sub Order of"
1576
  msgstr ""
1577
 
1578
+ #: includes/admin-functions.php:101
1579
  msgid "Show Sub-Orders"
1580
  msgstr ""
1581
 
1582
+ #: includes/admin-functions.php:101
1583
  msgid "Hide Sub-Orders"
1584
  msgstr ""
1585
 
1586
+ #: includes/admin-functions.php:286
1587
  msgid "Toggle Sub-orders"
1588
  msgstr ""
1589
 
1590
+ #: includes/admin-functions.php:427 includes/admin-functions.php:802
1591
  msgid "Total Sales"
1592
  msgstr ""
1593
 
1594
+ #: includes/admin-functions.php:434 includes/admin-functions.php:809
1595
  msgid "Total: "
1596
  msgstr ""
1597
 
1598
+ #: includes/admin-functions.php:437 includes/admin-functions.php:812
1599
+ #: includes/reports.php:349
1600
  msgid "Number of orders"
1601
  msgstr ""
1602
 
1603
+ #: includes/admin-functions.php:444 includes/admin-functions.php:819
1604
+ #: includes/reports.php:356
1605
  msgid "sales"
1606
  msgstr ""
1607
 
1608
+ #: includes/admin-functions.php:447 includes/admin-functions.php:822
1609
  msgid "Commision"
1610
  msgstr ""
1611
 
1612
+ #: includes/admin-functions.php:454 includes/admin-functions.php:829
1613
  msgid "Commision: "
1614
  msgstr ""
1615
 
1616
+ #: includes/class-core.php:134
1617
  msgid "Page %s"
1618
  msgstr ""
1619
 
1653
  msgid "[%s] Your product has been approved!"
1654
  msgstr ""
1655
 
1656
+ #: includes/class-scripts.php:118
 
 
 
 
 
 
 
 
1657
  msgid "Are you sure?"
1658
  msgstr ""
1659
 
1660
+ #: includes/class-scripts.php:119
1661
  msgid "Something went wrong. Please try again."
1662
  msgstr ""
1663
 
1664
+ #: includes/class-scripts.php:171
1665
  msgid "This field is required"
1666
  msgstr ""
1667
 
1668
+ #: includes/class-scripts.php:172
1669
  msgid "Please fix this field."
1670
  msgstr ""
1671
 
1672
+ #: includes/class-scripts.php:173
1673
  msgid "Please enter a valid email address."
1674
  msgstr ""
1675
 
1676
+ #: includes/class-scripts.php:174
1677
  msgid "Please enter a valid URL."
1678
  msgstr ""
1679
 
1680
+ #: includes/class-scripts.php:175
1681
  msgid "Please enter a valid date."
1682
  msgstr ""
1683
 
1684
+ #: includes/class-scripts.php:176
1685
  msgid "Please enter a valid date (ISO)."
1686
  msgstr ""
1687
 
1688
+ #: includes/class-scripts.php:177
1689
  msgid "Please enter a valid number."
1690
  msgstr ""
1691
 
1692
+ #: includes/class-scripts.php:178
1693
  msgid "Please enter only digits."
1694
  msgstr ""
1695
 
1696
+ #: includes/class-scripts.php:179
1697
  msgid "Please enter a valid credit card number."
1698
  msgstr ""
1699
 
1700
+ #: includes/class-scripts.php:180
1701
  msgid "Please enter the same value again."
1702
  msgstr ""
1703
 
1704
+ #: includes/class-scripts.php:181
1705
  msgid "Please enter no more than {0} characters."
1706
  msgstr ""
1707
 
1708
+ #: includes/class-scripts.php:182
1709
  msgid "Please enter at least {0} characters."
1710
  msgstr ""
1711
 
1712
+ #: includes/class-scripts.php:183
1713
  msgid "Please enter a value between {0} and {1} characters long."
1714
  msgstr ""
1715
 
1716
+ #: includes/class-scripts.php:184
1717
  msgid "Please enter a value between {0} and {1}."
1718
  msgstr ""
1719
 
1720
+ #: includes/class-scripts.php:185
1721
  msgid "Please enter a value less than or equal to {0}."
1722
  msgstr ""
1723
 
1724
+ #: includes/class-scripts.php:186
1725
  msgid "Please enter a value greater than or equal to {0}."
1726
  msgstr ""
1727
 
1728
+ #: includes/class-scripts.php:281
1729
  msgid "Upload featured image"
1730
  msgstr ""
1731
 
1732
+ #: includes/class-scripts.php:282
1733
  msgid "Choose a file"
1734
  msgstr ""
1735
 
1736
+ #: includes/class-scripts.php:283
1737
  msgid "Add Images to Product Gallery"
1738
  msgstr ""
1739
 
1740
+ #: includes/class-scripts.php:284
1741
  msgid "Set featured image"
1742
  msgstr ""
1743
 
1744
+ #: includes/class-scripts.php:285
1745
  #: includes/woo-views/html-product-download.php:17
1746
  #: includes/woo-views/html-product-download.php:32
1747
  msgid "Insert file URL"
1748
  msgstr ""
1749
 
1750
+ #: includes/class-scripts.php:286
1751
  msgid "Add to gallery"
1752
  msgstr ""
1753
 
1754
+ #: includes/class-scripts.php:287
1755
  msgid "Sorry, this attribute option already exists, Try a different one."
1756
  msgstr ""
1757
 
1758
+ #: includes/class-scripts.php:288
1759
  msgid ""
1760
  "Warning! This product will not have any variations if this option is not "
1761
  "checked."
1762
  msgstr ""
1763
 
1764
+ #: includes/class-scripts.php:289
1765
  msgid "Enter a name for the new attribute term:"
1766
  msgstr ""
1767
 
1768
+ #: includes/class-scripts.php:290
1769
  msgid "Remove this attribute?"
1770
  msgstr ""
1771
 
1772
+ #: includes/class-scripts.php:298
1773
  msgid ""
1774
  "Are you sure you want to link all variations? This will create a new "
1775
  "variation for each and every possible combination of variation attributes "
1776
  "(max %d per run)."
1777
  msgstr ""
1778
 
1779
+ #: includes/class-scripts.php:299
1780
  msgid "Enter a value"
1781
  msgstr ""
1782
 
1783
+ #: includes/class-scripts.php:300
1784
  msgid "Variation menu order (determines position in the list of variations)"
1785
  msgstr ""
1786
 
1787
+ #: includes/class-scripts.php:301
1788
  msgid "Enter a value (fixed or %)"
1789
  msgstr ""
1790
 
1791
+ #: includes/class-scripts.php:302
1792
  msgid "Are you sure you want to delete all variations? This cannot be undone."
1793
  msgstr ""
1794
 
1795
+ #: includes/class-scripts.php:303
1796
  msgid "Last warning, are you sure?"
1797
  msgstr ""
1798
 
1799
+ #: includes/class-scripts.php:304
1800
  msgid "Choose an image"
1801
  msgstr ""
1802
 
1803
+ #: includes/class-scripts.php:305
1804
  msgid "Set variation image"
1805
  msgstr ""
1806
 
1807
+ #: includes/class-scripts.php:306
1808
  msgid "variation added"
1809
  msgstr ""
1810
 
1811
+ #: includes/class-scripts.php:307
1812
  msgid "variations added"
1813
  msgstr ""
1814
 
1815
+ #: includes/class-scripts.php:308
1816
  msgid "No variations added"
1817
  msgstr ""
1818
 
1819
+ #: includes/class-scripts.php:309
1820
  msgid "Are you sure you want to remove this variation?"
1821
  msgstr ""
1822
 
1823
+ #: includes/class-scripts.php:310
1824
  msgid "Sale start date (YYYY-MM-DD format or leave blank)"
1825
  msgstr ""
1826
 
1827
+ #: includes/class-scripts.php:311
1828
  msgid "Sale end date (YYYY-MM-DD format or leave blank)"
1829
  msgstr ""
1830
 
1831
+ #: includes/class-scripts.php:312
1832
  msgid "Save changes before changing page?"
1833
  msgstr ""
1834
 
1835
+ #: includes/class-scripts.php:313
1836
  msgid "%qty% variation"
1837
  msgstr ""
1838
 
1839
+ #: includes/class-scripts.php:314
1840
  msgid "%qty% variations"
1841
  msgstr ""
1842
 
1843
+ #: includes/class-scripts.php:315
1844
  msgid "No Result Found"
1845
  msgstr ""
1846
 
1847
+ #: includes/class-scripts.php:318
1848
  msgid "Select and Crop"
1849
  msgstr ""
1850
 
1851
+ #: includes/class-scripts.php:319
1852
  msgid "Choose Image"
1853
  msgstr ""
1854
 
1855
+ #: includes/class-scripts.php:320
1856
  msgid "Product title is required"
1857
  msgstr ""
1858
 
1859
+ #: includes/class-scripts.php:321
1860
  msgid "Product category is required"
1861
  msgstr ""
1862
 
2116
  msgid "Withdrawal request for {amount} is cancelled"
2117
  msgstr ""
2118
 
2119
+ #: includes/functions.php:648 templates/products/new-product-single.php:580
2120
  msgid "Online"
2121
  msgstr ""
2122
 
2123
+ #: includes/functions.php:649 templates/products/new-product-single.php:581
2124
  msgid "Draft"
2125
  msgstr ""
2126
 
2127
+ #: includes/functions.php:650 templates/dashboard/products-widget.php:41
2128
  msgid "Pending Review"
2129
  msgstr ""
2130
 
2131
+ #: includes/functions.php:692
2132
  msgid "Simple Product"
2133
  msgstr ""
2134
 
2135
+ #: includes/functions.php:693
2136
  msgid "Variable Product"
2137
  msgstr ""
2138
 
2139
+ #: includes/functions.php:694
2140
  msgid "Grouped Product"
2141
  msgstr ""
2142
 
2143
+ #: includes/functions.php:695
2144
  msgid "Scheduled Product"
2145
  msgstr ""
2146
 
2147
+ #: includes/functions.php:893
2148
  msgid "Author"
2149
  msgstr ""
2150
 
2151
+ #: includes/functions.php:1083 includes/template-tags.php:309
2152
  #: templates/dashboard/products-widget.php:16
2153
  msgid "Products"
2154
  msgstr ""
2155
 
2156
+ #: includes/functions.php:1130
2157
  msgid "Account Name: %s"
2158
  msgstr ""
2159
 
2160
+ #: includes/functions.php:1134
2161
  msgid "Account Number: %s"
2162
  msgstr ""
2163
 
2164
+ #: includes/functions.php:1138
2165
  msgid "Bank Name: %s"
2166
  msgstr ""
2167
 
2168
+ #: includes/functions.php:1142
2169
  msgid "Address: %s"
2170
  msgstr ""
2171
 
2172
+ #: includes/functions.php:1146
2173
  msgid "Routing Number: %s"
2174
  msgstr ""
2175
 
2176
+ #: includes/functions.php:1150
2177
  msgid "IBAN: %s"
2178
  msgstr ""
2179
 
2180
+ #: includes/functions.php:1154
2181
  msgid "SWIFT: %s"
2182
  msgstr ""
2183
 
2184
+ #: includes/functions.php:1473
2185
  msgid "- Select a location -"
2186
  msgstr ""
2187
 
2188
+ #: includes/functions.php:1477 includes/functions.php:1500
2189
  msgid "Everywhere Else"
2190
  msgstr ""
2191
 
2192
+ #: includes/functions.php:1496
2193
  msgid "- Select a State -"
2194
  msgstr ""
2195
 
2196
+ #: includes/functions.php:1518
2197
  msgid "Ready to ship in..."
2198
  msgstr ""
2199
 
2200
+ #: includes/functions.php:1519
2201
  msgid "1 business day"
2202
  msgstr ""
2203
 
2204
+ #: includes/functions.php:1520
2205
  msgid "1-2 business day"
2206
  msgstr ""
2207
 
2208
+ #: includes/functions.php:1521
2209
  msgid "1-3 business day"
2210
  msgstr ""
2211
 
2212
+ #: includes/functions.php:1522
2213
  msgid "3-5 business day"
2214
  msgstr ""
2215
 
2216
+ #: includes/functions.php:1523
2217
  msgid "1-2 weeks"
2218
  msgstr ""
2219
 
2220
+ #: includes/functions.php:1524
2221
  msgid "2-3 weeks"
2222
  msgstr ""
2223
 
2224
+ #: includes/functions.php:1525
2225
  msgid "3-4 weeks"
2226
  msgstr ""
2227
 
2228
+ #: includes/functions.php:1526
2229
  msgid "4-6 weeks"
2230
  msgstr ""
2231
 
2232
+ #: includes/functions.php:1527
2233
  msgid "6-8 weeks"
2234
  msgstr ""
2235
 
2236
+ #: includes/functions.php:1627
2237
  msgid "All dates"
2238
  msgstr ""
2239
 
2240
+ #: includes/functions.php:1640
2241
  #. translators: 1: month name, 2: 4-digit year
2242
  msgid "%1$s %2$d"
2243
  msgstr ""
2244
 
2245
+ #: includes/functions.php:1713
2246
  msgid "Google Plus"
2247
  msgstr ""
2248
 
2249
+ #: includes/functions.php:1717
2250
  msgid "Twitter"
2251
  msgstr ""
2252
 
2253
+ #: includes/functions.php:1721
2254
  msgid "Pinterest"
2255
  msgstr ""
2256
 
2257
+ #: includes/functions.php:1725
2258
  msgid "LinkedIn"
2259
  msgstr ""
2260
 
2261
+ #: includes/functions.php:1729
2262
  msgid "Youtube"
2263
  msgstr ""
2264
 
2265
+ #: includes/functions.php:1733
2266
  msgid "Instagram"
2267
  msgstr ""
2268
 
2269
+ #: includes/functions.php:1737
2270
  msgid "Flickr"
2271
  msgstr ""
2272
 
2273
+ #: includes/functions.php:1983
2274
  msgid "Dokan Store Sidebar"
2275
  msgstr ""
2276
 
2277
+ #: includes/order-functions.php:336
2278
  msgid "Mark parent order completed when all child orders are completed."
2279
  msgstr ""
2280
 
2281
+ #: includes/order-functions.php:523
2282
  msgid "Pending Payment"
2283
  msgstr ""
2284
 
2285
+ #: includes/order-functions.php:538 templates/dashboard/orders-widget.php:46
2286
  msgid "Refunded"
2287
  msgstr ""
2288
 
2289
+ #: includes/order-functions.php:548
2290
  msgid "Failed"
2291
  msgstr ""
2292
 
2362
  msgstr ""
2363
 
2364
  #: includes/product-functions.php:217
2365
+ #: templates/products/products-listing.php:67
2366
+ #: templates/products/products-listing.php:159
2367
  msgid "Stock"
2368
  msgstr ""
2369
 
2427
  msgid "Expand"
2428
  msgstr ""
2429
 
2430
+ #: includes/product-functions.php:302 templates/orders/details.php:336
2431
  msgid "Close"
2432
  msgstr ""
2433
 
2472
  msgid "Hidden"
2473
  msgstr ""
2474
 
2475
+ #: includes/product-functions.php:454
2476
+ msgid "Edit"
2477
+ msgstr ""
2478
+
2479
+ #: includes/product-functions.php:462
2480
+ msgid "Delete Permanently"
2481
+ msgstr ""
2482
+
2483
+ #: includes/product-functions.php:471 templates/my-orders.php:88
2484
+ #: templates/orders/listing.php:122 templates/sub-orders.php:59
2485
+ msgid "View"
2486
+ msgstr ""
2487
+
2488
+ #: includes/reports.php:339
2489
  msgid "Sales total"
2490
  msgstr ""
2491
 
2530
  msgid "Refunded (%d)"
2531
  msgstr ""
2532
 
2533
+ #: includes/template-tags.php:316 templates/dashboard/orders-widget.php:15
2534
  msgid "Orders"
2535
  msgstr ""
2536
 
2537
+ #: includes/template-tags.php:333
2538
  msgid "Settings <i class=\"fa fa-angle-right pull-right\"></i>"
2539
  msgstr ""
2540
 
2541
+ #: includes/template-tags.php:341
2542
  msgid "Back to Dashboard"
2543
  msgstr ""
2544
 
2545
+ #: includes/template-tags.php:460 templates/settings/header.php:13
2546
  #: templates/store-lists-loop.php:61
2547
  msgid "Visit Store"
2548
  msgstr ""
2549
 
2550
+ #: includes/template-tags.php:461 templates/global/header-menu.php:48
2551
  msgid "Edit Account"
2552
  msgstr ""
2553
 
2554
+ #: includes/template-tags.php:462
2555
  msgid "Log out"
2556
  msgstr ""
2557
 
2558
+ #: includes/wc-crud-functions.php:90 includes/wc-legacy-functions.php:61
2559
  msgid "Order &ndash; %s"
2560
  msgstr ""
2561
 
2563
  msgid "Product SKU must be unique."
2564
  msgstr ""
2565
 
2566
+ #: includes/wc-functions.php:471
2567
  msgid "Cheating, eh?"
2568
  msgstr ""
2569
 
2570
+ #: includes/wc-functions.php:477
2571
  msgid "Please enter your first name."
2572
  msgstr ""
2573
 
2574
+ #: includes/wc-functions.php:478
2575
  msgid "Please enter your last name."
2576
  msgstr ""
2577
 
2578
+ #: includes/wc-functions.php:479
2579
  msgid "Please enter your phone number."
2580
  msgstr ""
2581
 
2582
+ #: includes/wc-functions.php:814
2583
  msgid "Your {site_title} order receipt from {order_date}"
2584
  msgstr ""
2585
 
2586
+ #: includes/wc-functions.php:815
2587
  msgid "Your {site_title} order from {order_date} is complete"
2588
  msgstr ""
2589
 
2590
+ #: includes/wc-functions.php:919
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2591
  msgid "is a required field."
2592
  msgstr ""
2593
 
2594
+ #: includes/wc-functions.php:925
2595
  msgid "Please provide a valid email address."
2596
  msgstr ""
2597
 
2598
+ #: includes/wc-functions.php:927
2599
  msgid "This email address is already registered."
2600
  msgstr ""
2601
 
2602
+ #: includes/wc-functions.php:933
2603
  msgid "Your current password is incorrect."
2604
  msgstr ""
2605
 
2606
+ #: includes/wc-functions.php:938
2607
  msgid "Please fill out all password fields."
2608
  msgstr ""
2609
 
2610
+ #: includes/wc-functions.php:941
2611
  msgid "Please enter your current password."
2612
  msgstr ""
2613
 
2614
+ #: includes/wc-functions.php:944
2615
  msgid "Please re-enter your password."
2616
  msgstr ""
2617
 
2618
+ #: includes/wc-functions.php:947
2619
  msgid "New passwords do not match."
2620
  msgstr ""
2621
 
2622
+ #: includes/wc-functions.php:968
2623
  msgid "Account details changed successfully."
2624
  msgstr ""
2625
 
2632
  msgstr ""
2633
 
2634
  #: includes/widgets/bestselling-product.php:62
2635
+ #: includes/widgets/menu-category.php:176 includes/widgets/store-contact.php:97
2636
+ #: includes/widgets/store-location.php:94 includes/widgets/store-menu.php:110
2637
  #: includes/widgets/top-rated-product.php:61
2638
  msgid "Title:"
2639
  msgstr ""
2664
  msgid "Dokan: Store Contact Form"
2665
  msgstr ""
2666
 
2667
+ #: includes/widgets/store-contact.php:91 templates/store-toc.php:36
2668
+ #: templates/store.php:40
2669
  msgid "Contact Vendor"
2670
  msgstr ""
2671
 
2678
  msgstr ""
2679
 
2680
  #: includes/widgets/store-location.php:88 templates/store-toc.php:33
2681
+ #: templates/store.php:36
2682
  msgid "Store Location"
2683
  msgstr ""
2684
 
2690
  msgid "Dokan: Store Category Menu"
2691
  msgstr ""
2692
 
2693
+ #: includes/widgets/store-menu.php:104
2694
  #: templates/products/new-product-single.php:261
2695
  #: templates/products/new-product-single.php:292
2696
  msgid "Category"
2716
  msgid "Bank Transfer"
2717
  msgstr ""
2718
 
2719
+ #: includes/withdraw-functions.php:121 includes/withdraw-functions.php:143
2720
  msgid "E-mail"
2721
  msgstr ""
2722
 
2723
+ #: includes/withdraw-functions.php:168
2724
  msgid "Your bank account name"
2725
  msgstr ""
2726
 
2727
+ #: includes/withdraw-functions.php:174
2728
  msgid "Your bank account number"
2729
  msgstr ""
2730
 
2731
+ #: includes/withdraw-functions.php:180
2732
  msgid "Name of bank"
2733
  msgstr ""
2734
 
2735
+ #: includes/withdraw-functions.php:186
2736
  msgid "Address of your bank"
2737
  msgstr ""
2738
 
2739
+ #: includes/withdraw-functions.php:192
2740
  msgid "Routing number"
2741
  msgstr ""
2742
 
2743
+ #: includes/withdraw-functions.php:198
2744
  msgid "IBAN"
2745
  msgstr ""
2746
 
2747
+ #: includes/withdraw-functions.php:204
2748
  msgid "Swift code"
2749
  msgstr ""
2750
 
2822
  msgid "Canel"
2823
  msgstr ""
2824
 
 
 
 
 
 
 
 
 
 
 
 
 
2825
  #: lib/class.dokan-settings-api.php:31
2826
  msgid "Active"
2827
  msgstr ""
2834
  msgid "Choose File"
2835
  msgstr ""
2836
 
2837
+ #: templates/dashboard/big-counter-widget.php:17
2838
  msgid "Sales"
2839
  msgstr ""
2840
 
2841
+ #: templates/dashboard/big-counter-widget.php:21
2842
+ #: templates/products/products-listing.php:69
2843
+ #: templates/products/products-listing.php:181
2844
  msgid "Earning"
2845
  msgstr ""
2846
 
2847
+ #: templates/dashboard/big-counter-widget.php:25
2848
  msgid "Pageview"
2849
  msgstr ""
2850
 
3129
  msgid "Address:"
3130
  msgstr ""
3131
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3132
  #: templates/global/seller-registration-form.php:65
3133
  msgid "I am a customer"
3134
  msgstr ""
3165
  msgid "Pay"
3166
  msgstr ""
3167
 
 
 
 
 
 
3168
  #: templates/my-orders.php:106
3169
  msgid "No orders found!"
3170
  msgstr ""
3177
  msgid "Filter"
3178
  msgstr ""
3179
 
3180
+ #: templates/orders/date-export.php:26
3181
  msgid "Export All"
3182
  msgstr ""
3183
 
3184
+ #: templates/orders/date-export.php:27
3185
  msgid "Export Filtered"
3186
  msgstr ""
3187
 
3221
  msgid "&nbsp; Edit"
3222
  msgstr ""
3223
 
3224
+ #: templates/orders/details.php:186
3225
  msgid "Update"
3226
  msgstr ""
3227
 
3228
+ #: templates/orders/details.php:194
3229
  msgid "Order Date:"
3230
  msgstr ""
3231
 
3232
+ #: templates/orders/details.php:201
3233
  msgid "Customer:"
3234
  msgstr ""
3235
 
3236
+ #: templates/orders/details.php:214
3237
  msgid "Email:"
3238
  msgstr ""
3239
 
3240
+ #: templates/orders/details.php:218
3241
  msgid "Phone:"
3242
  msgstr ""
3243
 
3244
+ #: templates/orders/details.php:222
3245
  msgid "Customer IP:"
3246
  msgstr ""
3247
 
3248
+ #: templates/orders/details.php:234
3249
  msgid "Customer Note:"
3250
  msgstr ""
3251
 
3252
+ #: templates/orders/details.php:269
3253
  msgid "added %s ago"
3254
  msgstr ""
3255
 
3256
+ #: templates/orders/details.php:278
3257
  msgid "There are no notes for this order yet."
3258
  msgstr ""
3259
 
3260
+ #: templates/orders/details.php:295
3261
  msgid "Customer note"
3262
  msgstr ""
3263
 
3264
+ #: templates/orders/details.php:296
3265
  msgid "Private note"
3266
  msgstr ""
3267
 
3268
+ #: templates/orders/details.php:304
3269
  msgid "Add Note"
3270
  msgstr ""
3271
 
3272
+ #: templates/orders/details.php:311 templates/orders/details.php:320
3273
  msgid "Tracking Number"
3274
  msgstr ""
3275
 
3276
+ #: templates/orders/details.php:315
3277
  msgid "Shipping Provider Name / URL"
3278
  msgstr ""
3279
 
3280
+ #: templates/orders/details.php:325
3281
  msgid "Date Shipped"
3282
  msgstr ""
3283
 
3284
+ #: templates/orders/details.php:326
3285
  #: templates/products/new-product-single.php:246
3286
  #: templates/products/new-product-single.php:253
3287
  #: templates/products/new-product.php:173
3291
  msgid "YYYY-MM-DD"
3292
  msgstr ""
3293
 
3294
+ #: templates/orders/details.php:335
3295
  msgid "Add Tracking Details"
3296
  msgstr ""
3297
 
3303
  msgid "Grant Access"
3304
  msgstr ""
3305
 
3306
+ #: templates/orders/listing.php:20 templates/orders/listing.php:46
3307
  msgid "Customer"
3308
  msgstr ""
3309
 
3310
+ #: templates/orders/listing.php:23 templates/orders/listing.php:93
3311
  #: templates/products/new-product-single.php:530
3312
  msgid "Action"
3313
  msgstr ""
3314
 
3315
+ #: templates/orders/listing.php:35 templates/orders/listing.php:37
3316
  msgid "Order %s"
3317
  msgstr ""
3318
 
3319
+ #: templates/orders/listing.php:67
3320
  msgid "Guest"
3321
  msgstr ""
3322
 
3323
+ #: templates/orders/listing.php:76 templates/products/products-listing.php:221
3324
  msgid "Unpublished"
3325
  msgstr ""
3326
 
3327
+ #: templates/orders/listing.php:78 templates/products/products-listing.php:224
3328
  msgid "Y/m/d g:i:s A"
3329
  msgstr ""
3330
 
3331
+ #: templates/orders/listing.php:84 templates/products/products-listing.php:231
3332
  msgid "%s ago"
3333
  msgstr ""
3334
 
3335
+ #: templates/orders/listing.php:86 templates/products/products-listing.php:233
3336
  msgid "Y/m/d"
3337
  msgstr ""
3338
 
3339
+ #: templates/orders/listing.php:112
3340
  msgid "Complete"
3341
  msgstr ""
3342
 
3343
+ #: templates/orders/listing.php:185
3344
  msgid "No orders found"
3345
  msgstr ""
3346
 
3417
  msgid "Access Denied, No product found"
3418
  msgstr ""
3419
 
3420
+ #: templates/products/new-product-single.php:32
3421
  msgid "Access Denied"
3422
  msgstr ""
3423
 
3467
  msgstr ""
3468
 
3469
  #: templates/products/new-product-single.php:196
3470
+ #: templates/products/products-listing.php:202
3471
  msgid "Downloadable"
3472
  msgstr ""
3473
 
3476
  msgstr ""
3477
 
3478
  #: templates/products/new-product-single.php:201
3479
+ #: templates/products/products-listing.php:200
3480
  msgid "Virtual"
3481
  msgstr ""
3482
 
3486
 
3487
  #: templates/products/new-product-single.php:213
3488
  #: templates/products/new-product.php:147
3489
+ #: templates/products/products-listing.php:68
3490
+ #: templates/products/products-listing.php:172
3491
  #: templates/products/tmpl-add-product-popup.php:49
3492
  msgid "Price"
3493
  msgstr ""
3580
  msgstr ""
3581
 
3582
  #: templates/products/new-product-single.php:438
3583
+ #: templates/products/products-listing.php:66
3584
+ #: templates/products/products-listing.php:150
3585
  msgid "SKU"
3586
  msgstr ""
3587
 
3638
  msgstr ""
3639
 
3640
  #: templates/products/new-product-single.php:528
3641
+ #: templates/products/products-listing.php:64
3642
+ #: templates/products/products-listing.php:134
3643
  msgid "Name"
3644
  msgstr ""
3645
 
3725
  msgid "Create Product"
3726
  msgstr ""
3727
 
3728
+ #: templates/products/products-listing.php:42
3729
  msgid "Add new product"
3730
  msgstr ""
3731
 
3732
+ #: templates/products/products-listing.php:63
3733
+ #: templates/products/products-listing.php:127
3734
  msgid "Image"
3735
  msgstr ""
3736
 
3737
+ #: templates/products/products-listing.php:70
3738
+ #: templates/products/products-listing.php:190
3739
  msgid "Type"
3740
  msgstr ""
3741
 
3742
+ #: templates/products/products-listing.php:71
3743
+ #: templates/products/products-listing.php:215
3744
  msgid "Views"
3745
  msgstr ""
3746
 
3747
+ #: templates/products/products-listing.php:162
 
 
 
 
 
 
 
 
3748
  msgid "In stock"
3749
  msgstr ""
3750
 
3751
+ #: templates/products/products-listing.php:164
3752
  msgid "Out of stock"
3753
  msgstr ""
3754
 
3755
+ #: templates/products/products-listing.php:194
3756
  msgid "Grouped"
3757
  msgstr ""
3758
 
3759
+ #: templates/products/products-listing.php:196
3760
  msgid "External/Affiliate"
3761
  msgstr ""
3762
 
3763
+ #: templates/products/products-listing.php:204
3764
  msgid "Simple"
3765
  msgstr ""
3766
 
3767
+ #: templates/products/products-listing.php:208
3768
  msgid "Variable"
3769
  msgstr ""
3770
 
3771
+ #: templates/products/products-listing.php:240
3772
  msgid "Published"
3773
  msgstr ""
3774
 
3775
+ #: templates/products/products-listing.php:243
3776
  msgid "Missed schedule"
3777
  msgstr ""
3778
 
3779
+ #: templates/products/products-listing.php:245
3780
  msgid "Scheduled"
3781
  msgstr ""
3782
 
3783
+ #: templates/products/products-listing.php:248
3784
  msgid "Last Modified"
3785
  msgstr ""
3786
 
3787
+ #: templates/products/products-listing.php:260
3788
  msgid "No product found"
3789
  msgstr ""
3790
 
3791
+ #: templates/products/products-listing.php:283
3792
  msgid "&laquo; Previous"
3793
  msgstr ""
3794
 
3795
+ #: templates/products/products-listing.php:284
3796
  msgid "Next &raquo;"
3797
  msgstr ""
3798
 
3844
  msgid "State "
3845
  msgstr ""
3846
 
3847
+ #: templates/settings/payment.php:39 templates/settings/store-form.php:228
3848
  msgid "Update Settings"
3849
  msgstr ""
3850
 
3851
+ #: templates/settings/store-form.php:82
3852
  msgid "Upload a banner for your store. Banner size is (%sx%s) pixels."
3853
  msgstr ""
3854
 
3855
+ #: templates/settings/store-form.php:95
3856
  msgid "Profile Picture"
3857
  msgstr ""
3858
 
3859
+ #: templates/settings/store-form.php:105
3860
  msgid "Upload Photo"
3861
  msgstr ""
3862
 
3863
+ #: templates/settings/store-form.php:111
3864
  msgid "Store Name"
3865
  msgstr ""
3866
 
3867
+ #: templates/settings/store-form.php:114
3868
  msgid "store name"
3869
  msgstr ""
3870
 
3871
+ #: templates/settings/store-form.php:142
3872
  msgid "Phone No"
3873
  msgstr ""
3874
 
3875
+ #: templates/settings/store-form.php:144
3876
  msgid "+123456.."
3877
  msgstr ""
3878
 
3879
+ #: templates/settings/store-form.php:161
3880
  msgid "More product"
3881
  msgstr ""
3882
 
3883
+ #: templates/settings/store-form.php:166
3884
  msgid "Enable tab on product single page view"
3885
  msgstr ""
3886
 
3887
+ #: templates/settings/store-form.php:174
3888
  msgid "Map"
3889
  msgstr ""
3890
 
3891
+ #: templates/settings/store-form.php:181
3892
  msgid "Type an address to find"
3893
  msgstr ""
3894
 
3895
+ #: templates/settings/store-form.php:182
3896
  msgid "Find Address"
3897
  msgstr ""
3898
 
3899
+ #: templates/settings/store-form.php:200
3900
  msgid "Show terms and conditions in store page"
3901
  msgstr ""
3902
 
3903
+ #: templates/settings/store-form.php:206
3904
  msgid "TOC Details"
3905
  msgstr ""
3906
 
3928
  msgid "Search seller &hellip;"
3929
  msgstr ""
3930
 
3931
+ #: templates/store-toc.php:31 templates/store.php:33
3932
  msgid "Store Category"
3933
  msgstr ""
3934
 
3936
  msgid "Terms And Conditions"
3937
  msgstr ""
3938
 
3939
+ #: templates/store.php:83
3940
  msgid "No products were found of this vendor!"
3941
  msgstr ""
3942
 
3975
  msgid "No products found"
3976
  msgstr ""
3977
 
3978
+ #: templates/withdraw/request-form.php:16
3979
  msgid "Withdraw Amount"
3980
  msgstr ""
3981
 
3982
+ #: templates/withdraw/request-form.php:29
3983
  msgid "Payment Method"
3984
  msgstr ""
3985
 
3986
+ #: templates/withdraw/request-form.php:44
3987
  msgid "Submit Request"
3988
  msgstr ""
3989
 
3990
+ #: templates/withdraw/request-form.php:50
3991
+ msgid ""
3992
+ "No withdraw method is available. Please update your payment method to "
3993
+ "withdraw funds."
3994
+ msgstr ""
3995
+
3996
+ #: templates/withdraw/request-form.php:50
3997
+ msgid "Payment Settings Setup"
3998
+ msgstr ""
3999
+
4000
  #: templates/withdraw/status-listing.php:12
4001
  msgid "Withdraw Request"
4002
  msgstr ""
4102
  msgid "&rarr;"
4103
  msgstr ""
4104
 
4105
+ #: includes/wc-crud-functions.php:90 includes/wc-legacy-functions.php:61
4106
  msgctxt "Order date parsed by strftime"
4107
  msgid "%b %d, %Y @ %I:%M %p"
4108
  msgstr ""
lib/class-wedevs-insights.php CHANGED
@@ -279,19 +279,19 @@ class WeDevs_Insights {
279
  $optout_url = add_query_arg( $this->slug . '_tracker_optout', 'true' );
280
 
281
  if ( empty( $this->notice ) ) {
282
- $notice = sprintf( __( 'Want to help make <strong>%s</strong> even more awesome? Allow weDevs to collect non-sensitive diagnostic data and usage information.', 'textdomain' ), $this->name );
283
  } else {
284
  $notice = $this->notice;
285
  }
286
 
287
- $notice .= ' (<a class="insights-data-we-collect" href="#">' . __( 'what we collect', 'textdomain' ) . '</a>)';
288
  $notice .= '<p class="description" style="display:none;">' . implode( ', ', $this->data_we_collect() ) . '. No sensitive data is tracked.</p>';
289
 
290
  echo '<div class="updated"><p>';
291
  echo $notice;
292
  echo '</p><p class="submit">';
293
- echo '&nbsp;<a href="' . esc_url( $optin_url ) . '" class="button-primary button-large">' . __( 'Allow', 'textdomain' ) . '</a>';
294
- echo '&nbsp;<a href="' . esc_url( $optout_url ) . '" class="button-secondary button-large">' . __( 'No thanks', 'textdomain' ) . '</a>';
295
  echo '</p></div>';
296
 
297
  echo "<script type='text/javascript'>jQuery('.insights-data-we-collect').on('click', function(e) {
@@ -468,7 +468,7 @@ class WeDevs_Insights {
468
 
469
  $schedules['weekly'] = array(
470
  'interval' => DAY_IN_SECONDS * 7,
471
- 'display' => __( 'Once Weekly', 'textdomain' )
472
  );
473
 
474
  return $schedules;
@@ -560,14 +560,14 @@ class WeDevs_Insights {
560
  public function uninstall_reason_submission() {
561
  global $wpdb;
562
 
563
- if ( ! isset( $_POST['reason_id'] ) ) {
564
  wp_send_json_error();
565
  }
566
 
567
  $current_user = wp_get_current_user();
568
 
569
  $data = array(
570
- 'reason_id' => sanitize_text_field( $_POST['reason_id'] ),
571
  'plugin' => $this->slug,
572
  'url' => home_url(),
573
  'user_email' => $current_user->user_email,
@@ -604,7 +604,7 @@ class WeDevs_Insights {
604
  <div class="wd-dr-modal" id="<?php echo $this->slug; ?>-wd-dr-modal">
605
  <div class="wd-dr-modal-wrap">
606
  <div class="wd-dr-modal-header">
607
- <h3><?php _e( 'If you have a moment, please let us know why you are deactivating:', 'domain' ); ?></h3>
608
  </div>
609
 
610
  <div class="wd-dr-modal-body">
@@ -618,9 +618,9 @@ class WeDevs_Insights {
618
  </div>
619
 
620
  <div class="wd-dr-modal-footer">
621
- <a href="#" class="dont-bother-me"><?php _e( 'I rather wouldn\'t say', 'domain' ); ?></a>
622
- <button class="button-secondary"><?php _e( 'Submit & Deactivate', 'domain' ); ?></button>
623
- <button class="button-primary"><?php _e( 'Canel', 'domain' ); ?></button>
624
  </div>
625
  </div>
626
  </div>
279
  $optout_url = add_query_arg( $this->slug . '_tracker_optout', 'true' );
280
 
281
  if ( empty( $this->notice ) ) {
282
+ $notice = sprintf( __( 'Want to help make <strong>%s</strong> even more awesome? Allow weDevs to collect non-sensitive diagnostic data and usage information.', 'dokan-lite' ), $this->name );
283
  } else {
284
  $notice = $this->notice;
285
  }
286
 
287
+ $notice .= ' (<a class="insights-data-we-collect" href="#">' . __( 'what we collect', 'dokan-lite' ) . '</a>)';
288
  $notice .= '<p class="description" style="display:none;">' . implode( ', ', $this->data_we_collect() ) . '. No sensitive data is tracked.</p>';
289
 
290
  echo '<div class="updated"><p>';
291
  echo $notice;
292
  echo '</p><p class="submit">';
293
+ echo '&nbsp;<a href="' . esc_url( $optin_url ) . '" class="button-primary button-large">' . __( 'Allow', 'dokan-lite' ) . '</a>';
294
+ echo '&nbsp;<a href="' . esc_url( $optout_url ) . '" class="button-secondary button-large">' . __( 'No thanks', 'dokan-lite' ) . '</a>';
295
  echo '</p></div>';
296
 
297
  echo "<script type='text/javascript'>jQuery('.insights-data-we-collect').on('click', function(e) {
468
 
469
  $schedules['weekly'] = array(
470
  'interval' => DAY_IN_SECONDS * 7,
471
+ 'display' => __( 'Once Weekly', 'dokan-lite' )
472
  );
473
 
474
  return $schedules;
560
  public function uninstall_reason_submission() {
561
  global $wpdb;
562
 
563
+ if ( ! isset( $_POST['reason_id'] ) ) { // WPCS: CSRF ok, Input var ok.
564
  wp_send_json_error();
565
  }
566
 
567
  $current_user = wp_get_current_user();
568
 
569
  $data = array(
570
+ 'reason_id' => sanitize_text_field( $_POST['reason_id'] ), // WPCS: CSRF ok, Input var ok.
571
  'plugin' => $this->slug,
572
  'url' => home_url(),
573
  'user_email' => $current_user->user_email,
604
  <div class="wd-dr-modal" id="<?php echo $this->slug; ?>-wd-dr-modal">
605
  <div class="wd-dr-modal-wrap">
606
  <div class="wd-dr-modal-header">
607
+ <h3><?php _e( 'If you have a moment, please let us know why you are deactivating:', 'dokan-lite' ); ?></h3>
608
  </div>
609
 
610
  <div class="wd-dr-modal-body">
618
  </div>
619
 
620
  <div class="wd-dr-modal-footer">
621
+ <a href="#" class="dont-bother-me"><?php _e( 'I rather wouldn\'t say', 'dokan-lite' ); ?></a>
622
+ <button class="button-secondary"><?php _e( 'Submit & Deactivate', 'dokan-lite' ); ?></button>
623
+ <button class="button-primary"><?php _e( 'Canel', 'dokan-lite' ); ?></button>
624
  </div>
625
  </div>
626
  </div>
lib/class-weforms-upsell.php DELETED
@@ -1,412 +0,0 @@
1
- <?php
2
-
3
- if ( ! class_exists( 'WeForms_Upsell' ) ) :
4
-
5
- /**
6
- * weForms Upsell Class
7
- */
8
- class WeForms_Upsell {
9
-
10
- /**
11
- * Affiliate code for referal tracking
12
- *
13
- * @var string
14
- */
15
- private $affiliate;
16
-
17
- /**
18
- * Learn more link
19
- *
20
- * @var string
21
- */
22
- private $learn_more = 'https://wedevs.com/weforms-details/';
23
-
24
- /**
25
- * Instantiate the class
26
- *
27
- * @param string $affiliate
28
- */
29
- function __construct( $affiliate = '' ) {
30
- $this->affiliate = $affiliate;
31
-
32
- add_action( 'init', array( $this, 'init_hooks' ) );
33
- }
34
-
35
- /**
36
- * Initialize the hooks
37
- *
38
- * @return void
39
- */
40
- public function init_hooks() {
41
-
42
- if ( class_exists( 'weForms' ) ) {
43
- return;
44
- }
45
-
46
- if ( ! current_user_can( 'manage_options' ) ) {
47
- return;
48
- }
49
-
50
- add_action( 'admin_notices', array( $this, 'activation_notice' ) );
51
-
52
- add_action( 'wp_ajax_weforms_upsell_installer', array( $this, 'install_weforms' ) );
53
- add_action( 'wp_ajax_weforms_upsell_dismiss', array( $this, 'dismiss_weforms_notice' ) );
54
- }
55
-
56
- /**
57
- * Show the plugin installation notice
58
- *
59
- * @return void
60
- */
61
- public function activation_notice() {
62
-
63
- if ( $this->is_dismissed() ) {
64
- return;
65
- }
66
- ?>
67
- <div class="updated" id="weforms-upsell-prompt">
68
- <div class="weforms-upsell-logo">
69
- <img src="https://wedevs-com-wedevs.netdna-ssl.com/wp-content/uploads/2017/08/weforms-upsell.png" width="272" height="71" alt="weForms Logo">
70
- </div>
71
- <div class="weforms-upsell-text">
72
- <h2>weForms is here!</h2>
73
-
74
- <p>weForms is the next generation contact form plugin for WordPress.</p>
75
- </div>
76
- <div class="weforms-upsell-cta">
77
- <button id="weforms-upsell-prompt-btn" class="button"><?php _e( 'Install Now', 'weforms' ); ?></button>
78
- &nbsp;<a href="#" class="learn-more" data-tube="NJvjy9WFyAM">Learn More</a>
79
- </div>
80
- <button type="button" class="notice-dismiss" style="padding: 3px;" title="<?php _e( 'Dismiss this notice.' ); ?>">
81
- <span class="screen-reader-text"><?php _e( 'Dismiss this notice.' ); ?></span>
82
- </button>
83
- </div>
84
-
85
- <div class="weforms-upsell-modal" id="weforms-upsell-modal">
86
- <a class="close">
87
- &times;
88
- <span class="screen-reader-text">Close modal window</span>
89
- </a>
90
- <div class="video-wrap">
91
- <iframe id="weforms-upsell-modal-iframe" width="1280" height="720" src="" frameborder="0" allowfullscreen></iframe>
92
- </div>
93
-
94
- <div class="learn-more">
95
- <a href="<?php echo $this->learn_more_link(); ?>" target="_blank" class="button button-primary">Learn more about weForms</a>
96
- </div>
97
- </div>
98
- <div class="weforms-upsell-modal-backdrop" id="weforms-upsell-modal-backdrop"></div>
99
-
100
- <style type="text/css">
101
- div#weforms-upsell-prompt * {
102
- box-sizing: border-box;
103
- }
104
-
105
- div#weforms-upsell-prompt {
106
- display: flex;
107
- flex-direction: row;
108
- flex-wrap: nowrap;
109
- justify-content: flex-start;
110
- align-content: flex-start;
111
- align-items: flex-start;
112
- position: relative;
113
- border: none;
114
- margin: 5px 0 15px;
115
- padding: 0 0 0 10px;
116
- }
117
-
118
- .weforms-upsell-logo {
119
- margin: 0;
120
- height: 71px;
121
- order: 0;
122
- flex: 0 1 272px;
123
- align-self: auto;
124
- padding-left: 15px;
125
- }
126
-
127
- .weforms-upsell-text {
128
- background: #46b450;
129
- color: #fff;
130
- padding: 0;
131
- height: 71px;
132
- margin-left: -35px;
133
- order: 0;
134
- flex: 1 1 auto;
135
- align-self: auto;
136
- }
137
-
138
- .weforms-upsell-text h2 {
139
- color: #fff;
140
- margin: 10px 0;
141
- }
142
-
143
- .weforms-upsell-cta {
144
- text-align: center;
145
- order: 0;
146
- flex: 0 1 220px;
147
- align-self: auto;
148
- padding-top: 20px;
149
- vertical-align: middle;
150
- height: 71px;
151
- line-height: 28px;
152
- }
153
-
154
- .weforms-upsell-modal {
155
- background: #fff;
156
- position: fixed;
157
- top: 5%;
158
- bottom: 5%;
159
- right: 10%;
160
- left: 10%;
161
- display: none;
162
- box-shadow: 0 1px 20px 5px rgba(0, 0, 0, 0.1);
163
- z-index: 160000;
164
- }
165
-
166
- .weforms-upsell-modal .video-wrap {
167
- position: relative;
168
- padding-bottom: 56.25%; /* 16:9 */
169
- padding-top: 25px;
170
- height: 0;
171
- }
172
-
173
- .weforms-upsell-modal .video-wrap iframe {
174
- position: absolute;
175
- top: 0;
176
- left: 0;
177
- width: 100%;
178
- height: 100%;
179
- }
180
-
181
- .weforms-upsell-modal .learn-more {
182
- position: absolute;
183
- bottom: 0;
184
- right: 10px;
185
- background: #fff;
186
- padding: 10px;
187
- border-radius: 3px;
188
- }
189
-
190
- .weforms-upsell-modal a.close {
191
- position: absolute;
192
- top: 20px;
193
- right: -60px;
194
- font: 300 1.71429em "dashicons" !important;
195
- content: '\f335';
196
- display: inline-block;
197
- padding: 10px 20px 0 20px;
198
- z-index: 5;
199
- text-decoration: none;
200
- height: 40px;
201
- cursor: pointer;
202
- background: #000;
203
- color: #fff;
204
- border-radius: 50%;
205
- }
206
-
207
- .weforms-upsell-modal-backdrop {
208
- position: fixed;
209
- z-index: 159999;
210
- top: 0;
211
- left: 0;
212
- right: 0;
213
- bottom: 0;
214
- min-height: 360px;
215
- background: #000;
216
- opacity: .7;
217
- display: none;
218
- }
219
-
220
- .weforms-upsell-modal.show,
221
- .weforms-upsell-modal-backdrop.show {
222
- display: block;
223
- }
224
- </style>
225
-
226
- <script type="text/javascript">
227
- (function ($) {
228
- var wrapper = $('#weforms-upsell-prompt'),
229
- modal = $('#weforms-upsell-modal'),
230
- modalBackdrop = $('#weforms-upsell-modal-backdrop'),
231
- iframe = $('#weforms-upsell-modal-iframe');
232
-
233
- wrapper.on('click', '#weforms-upsell-prompt-btn', function (e) {
234
- var self = $(this);
235
-
236
- e.preventDefault();
237
- self.addClass('install-now updating-message');
238
- self.text('<?php echo esc_js( 'Installing...' ); ?>');
239
-
240
- wp.ajax.send( 'weforms_upsell_installer', {
241
- data: {
242
- _wpnonce: '<?php echo wp_create_nonce('weforms_upsell_installer'); ?>'
243
- },
244
-
245
- success: function(response) {
246
- self.text('<?php echo esc_js( 'Installed' ); ?>');
247
- window.location.href = '<?php echo admin_url( 'admin.php?page=weforms' ); ?>';
248
- },
249
-
250
- error: function(error) {
251
- self.removeClass('install-now updating-message');
252
- alert( error );
253
- },
254
-
255
- complete: function() {
256
- self.attr('disabled', 'disabled');
257
- self.removeClass('install-now updating-message');
258
- }
259
- });
260
- });
261
-
262
- wrapper.on('click', '.notice-dismiss', function (e) {
263
- e.preventDefault();
264
-
265
- var self = $(this);
266
-
267
- wp.ajax.send( 'weforms_upsell_dismiss' );
268
-
269
- self.closest('.updated').slideUp('fast', function() {
270
- self.remove();
271
- });
272
- });
273
-
274
- wrapper.on('click', 'a.learn-more', function(e) {
275
- e.preventDefault();
276
-
277
- modal.addClass('show');
278
- modalBackdrop.addClass('show');
279
-
280
- iframe.attr( 'src', 'https://www.youtube.com/embed/sqP-nvyqUdQ?rel=0&amp;controls=0&amp;showinfo=0&amp;autoplay=1' );
281
- });
282
-
283
- $('body').on('click', '.weforms-upsell-modal a.close', function(e) {
284
- e.preventDefault();
285
-
286
- console.log('close modal');
287
-
288
- modal.removeClass('show');
289
- modalBackdrop.removeClass('show');
290
-
291
- iframe.attr( 'src', '' );
292
- });
293
- })(jQuery);
294
- </script>
295
- <?php
296
- }
297
-
298
- /**
299
- * Check if the notice is dimissed
300
- *
301
- * @return boolean
302
- */
303
- public function is_dismissed() {
304
- return 'yes' == get_option( 'weforms_upsell_dismiss', 'no' );
305
- }
306
-
307
- /**
308
- * Dismiss the weForms notice
309
- *
310
- * @return void
311
- */
312
- public function dismiss_notice() {
313
- update_option( 'weforms_upsell_dismiss', 'yes' );
314
- }
315
-
316
- /**
317
- * Learn more link, append affiliate link if present
318
- *
319
- * @return string
320
- */
321
- public function learn_more_link() {
322
- $link = $this->learn_more;
323
-
324
- if ( ! empty( $this->affiliate ) ) {
325
- $link = add_query_arg( array( 'ref' => $this->affiliate ), $link );
326
- }
327
-
328
- return $link;
329
- }
330
-
331
- /**
332
- * Fail if plugin installtion/activation fails
333
- *
334
- * @param Object $thing
335
- *
336
- * @return void
337
- */
338
- public function fail_on_error( $thing ) {
339
- if ( is_wp_error( $thing ) ) {
340
- wp_send_json_error( $thing->get_error_message() );
341
- }
342
- }
343
-
344
- /**
345
- * Install weForms
346
- *
347
- * @return void
348
- */
349
- public function install_weforms() {
350
- check_ajax_referer( 'weforms_upsell_installer' );
351
-
352
- if ( ! current_user_can( 'manage_options' ) ) {
353
- wp_send_json_error( __( 'You don\'t have permission to install the plugins' ) );
354
- }
355
-
356
- $weforms_status = $this->install_plugin( 'weforms', 'weforms.php' );
357
- $this->fail_on_error( $weforms_status );
358
-
359
- $this->dismiss_notice();
360
-
361
- if ( ! empty( $this->affiliate ) ) {
362
- update_option( '_weforms_aff_ref', $this->affiliate );
363
- }
364
-
365
- wp_send_json_success();
366
- }
367
-
368
- /**
369
- * Install and activate a plugin
370
- *
371
- * @param string $slug
372
- * @param string $file
373
- *
374
- * @return WP_Error|null
375
- */
376
- public function install_plugin( $slug, $file ) {
377
- include_once ABSPATH . 'wp-admin/includes/plugin-install.php';
378
- include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
379
-
380
- $plugin_basename = $slug . '/' . $file;
381
-
382
- // if exists and not activated
383
- if ( file_exists( WP_PLUGIN_DIR . '/' . $plugin_basename ) ) {
384
- return activate_plugin( $plugin_basename );
385
- }
386
-
387
- // seems like the plugin doesn't exists. Download and activate it
388
- $upgrader = new Plugin_Upgrader( new WP_Ajax_Upgrader_Skin() );
389
-
390
- $api = plugins_api( 'plugin_information', array( 'slug' => $slug, 'fields' => array( 'sections' => false ) ) );
391
- $result = $upgrader->install( $api->download_link );
392
-
393
- if ( is_wp_error( $result ) ) {
394
- return $result;
395
- }
396
-
397
- return activate_plugin( $plugin_basename );
398
- }
399
-
400
- /**
401
- * Dismiss the notice via Ajax
402
- *
403
- * @return void
404
- */
405
- public function dismiss_weforms_notice() {
406
- $this->dismiss_notice();
407
-
408
- wp_send_json_success();
409
- }
410
- }
411
-
412
- endif;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/class.settings-api.php CHANGED
@@ -10,7 +10,6 @@
10
  * @example example/oop-example.php How to use the class
11
  */
12
  if ( !class_exists( 'WeDevs_Settings_API' ) ):
13
-
14
  class WeDevs_Settings_API {
15
 
16
  /**
@@ -28,7 +27,7 @@ class WeDevs_Settings_API {
28
  protected $settings_fields = array();
29
 
30
  public function __construct() {
31
- add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ), 10 );
32
  }
33
 
34
  /**
@@ -127,7 +126,8 @@ class WeDevs_Settings_API {
127
 
128
  $args = array(
129
  'id' => $name,
130
- 'label_for' => $args['label_for'] = "{$section}[{$name}]",
 
131
  'desc' => isset( $option['desc'] ) ? $option['desc'] : '',
132
  'name' => $label,
133
  'section' => $section,
@@ -204,9 +204,9 @@ class WeDevs_Settings_API {
204
  $size = isset( $args['size'] ) && !is_null( $args['size'] ) ? $args['size'] : 'regular';
205
  $type = isset( $args['type'] ) ? $args['type'] : 'number';
206
  $placeholder = empty( $args['placeholder'] ) ? '' : ' placeholder="' . $args['placeholder'] . '"';
207
- $min = empty( $args['min'] ) ? '' : ' min="' . $args['min'] . '"';
208
- $max = empty( $args['max'] ) ? '' : ' max="' . $args['max'] . '"';
209
- $step = empty( $args['max'] ) ? '' : ' step="' . $args['step'] . '"';
210
 
211
  $html = sprintf( '<input type="%1$s" class="%2$s-number" id="%3$s[%4$s]" name="%3$s[%4$s]" value="%5$s"%6$s%7$s%8$s%9$s/>', $type, $size, $args['section'], $args['id'], $value, $placeholder, $min, $max, $step );
212
  $html .= $this->get_field_description( $args );
@@ -234,7 +234,7 @@ class WeDevs_Settings_API {
234
  }
235
 
236
  /**
237
- * Displays a multicheckbox a settings field
238
  *
239
  * @param array $args settings field args
240
  */
@@ -257,7 +257,7 @@ class WeDevs_Settings_API {
257
  }
258
 
259
  /**
260
- * Displays a multicheckbox a settings field
261
  *
262
  * @param array $args settings field args
263
  */
@@ -317,7 +317,7 @@ class WeDevs_Settings_API {
317
  }
318
 
319
  /**
320
- * Displays a textarea for a settings field
321
  *
322
  * @param array $args settings field args
323
  * @return string
@@ -365,7 +365,7 @@ class WeDevs_Settings_API {
365
  $value = esc_attr( $this->get_option( $args['id'], $args['section'], $args['std'] ) );
366
  $size = isset( $args['size'] ) && !is_null( $args['size'] ) ? $args['size'] : 'regular';
367
  $id = $args['section'] . '[' . $args['id'] . ']';
368
- $label = isset( $args['options']['button_label'] ) ? $args['options']['button_label'] : __( 'Choose File' );
369
 
370
  $html = sprintf( '<input type="text" class="%1$s-text wpsa-url" id="%2$s[%3$s]" name="%2$s[%3$s]" value="%4$s"/>', $size, $args['section'], $args['id'], $value );
371
  $html .= '<input type="button" class="button wpsa-browse" value="' . $label . '" />';
@@ -406,6 +406,24 @@ class WeDevs_Settings_API {
406
  echo $html;
407
  }
408
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
409
  /**
410
  * Sanitize callback for Settings API
411
  *
@@ -483,20 +501,15 @@ class WeDevs_Settings_API {
483
  */
484
  function show_navigation() {
485
  $html = '<h2 class="nav-tab-wrapper">';
486
-
487
  $count = count( $this->settings_sections );
488
-
489
  // don't show the navigation if only one section exists
490
  if ( $count === 1 ) {
491
  return;
492
  }
493
-
494
  foreach ( $this->settings_sections as $tab ) {
495
  $html .= sprintf( '<a href="#%1$s" class="nav-tab" id="%1$s-tab"><span class="dashicons %3$s"></span> %2$s</a>', $tab['id'], $tab['title'], ! empty( $tab['icon'] ) ? $tab['icon'] : '' );
496
  }
497
-
498
  $html .= '</h2>';
499
-
500
  echo $html;
501
  }
502
 
@@ -518,7 +531,7 @@ class WeDevs_Settings_API {
518
  do_action( 'wsa_form_bottom_' . $form['id'], $form );
519
  if ( isset( $this->settings_fields[ $form['id'] ] ) ):
520
  ?>
521
- <div>
522
  <?php submit_button(); ?>
523
  </div>
524
  <?php endif; ?>
@@ -548,6 +561,15 @@ class WeDevs_Settings_API {
548
  if (typeof(localStorage) != 'undefined' ) {
549
  activetab = localStorage.getItem("activetab");
550
  }
 
 
 
 
 
 
 
 
 
551
  if (activetab != '' && $(activetab).length ) {
552
  $(activetab).fadeIn();
553
  } else {
@@ -626,4 +648,4 @@ class WeDevs_Settings_API {
626
 
627
  }
628
 
629
- endif;
10
  * @example example/oop-example.php How to use the class
11
  */
12
  if ( !class_exists( 'WeDevs_Settings_API' ) ):
 
13
  class WeDevs_Settings_API {
14
 
15
  /**
27
  protected $settings_fields = array();
28
 
29
  public function __construct() {
30
+ add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) );
31
  }
32
 
33
  /**
126
 
127
  $args = array(
128
  'id' => $name,
129
+ 'class' => isset( $option['class'] ) ? $option['class'] : $name,
130
+ 'label_for' => "{$section}[{$name}]",
131
  'desc' => isset( $option['desc'] ) ? $option['desc'] : '',
132
  'name' => $label,
133
  'section' => $section,
204
  $size = isset( $args['size'] ) && !is_null( $args['size'] ) ? $args['size'] : 'regular';
205
  $type = isset( $args['type'] ) ? $args['type'] : 'number';
206
  $placeholder = empty( $args['placeholder'] ) ? '' : ' placeholder="' . $args['placeholder'] . '"';
207
+ $min = ( $args['min'] == '' ) ? '' : ' min="' . $args['min'] . '"';
208
+ $max = ( $args['max'] == '' ) ? '' : ' max="' . $args['max'] . '"';
209
+ $step = ( $args['step'] == '' ) ? '' : ' step="' . $args['step'] . '"';
210
 
211
  $html = sprintf( '<input type="%1$s" class="%2$s-number" id="%3$s[%4$s]" name="%3$s[%4$s]" value="%5$s"%6$s%7$s%8$s%9$s/>', $type, $size, $args['section'], $args['id'], $value, $placeholder, $min, $max, $step );
212
  $html .= $this->get_field_description( $args );
234
  }
235
 
236
  /**
237
+ * Displays a multicheckbox for a settings field
238
  *
239
  * @param array $args settings field args
240
  */
257
  }
258
 
259
  /**
260
+ * Displays a radio button for a settings field
261
  *
262
  * @param array $args settings field args
263
  */
317
  }
318
 
319
  /**
320
+ * Displays the html for a settings field
321
  *
322
  * @param array $args settings field args
323
  * @return string
365
  $value = esc_attr( $this->get_option( $args['id'], $args['section'], $args['std'] ) );
366
  $size = isset( $args['size'] ) && !is_null( $args['size'] ) ? $args['size'] : 'regular';
367
  $id = $args['section'] . '[' . $args['id'] . ']';
368
+ $label = isset( $args['options']['button_label'] ) ? $args['options']['button_label'] : __( 'Choose File', 'dokan-lite' );
369
 
370
  $html = sprintf( '<input type="text" class="%1$s-text wpsa-url" id="%2$s[%3$s]" name="%2$s[%3$s]" value="%4$s"/>', $size, $args['section'], $args['id'], $value );
371
  $html .= '<input type="button" class="button wpsa-browse" value="' . $label . '" />';
406
  echo $html;
407
  }
408
 
409
+
410
+ /**
411
+ * Displays a select box for creating the pages select box
412
+ *
413
+ * @param array $args settings field args
414
+ */
415
+ function callback_pages( $args ) {
416
+
417
+ $dropdown_args = array(
418
+ 'selected' => esc_attr($this->get_option($args['id'], $args['section'], $args['std'] ) ),
419
+ 'name' => $args['section'] . '[' . $args['id'] . ']',
420
+ 'id' => $args['section'] . '[' . $args['id'] . ']',
421
+ 'echo' => 0
422
+ );
423
+ $html = wp_dropdown_pages( $dropdown_args );
424
+ echo $html;
425
+ }
426
+
427
  /**
428
  * Sanitize callback for Settings API
429
  *
501
  */
502
  function show_navigation() {
503
  $html = '<h2 class="nav-tab-wrapper">';
 
504
  $count = count( $this->settings_sections );
 
505
  // don't show the navigation if only one section exists
506
  if ( $count === 1 ) {
507
  return;
508
  }
 
509
  foreach ( $this->settings_sections as $tab ) {
510
  $html .= sprintf( '<a href="#%1$s" class="nav-tab" id="%1$s-tab"><span class="dashicons %3$s"></span> %2$s</a>', $tab['id'], $tab['title'], ! empty( $tab['icon'] ) ? $tab['icon'] : '' );
511
  }
 
512
  $html .= '</h2>';
 
513
  echo $html;
514
  }
515
 
531
  do_action( 'wsa_form_bottom_' . $form['id'], $form );
532
  if ( isset( $this->settings_fields[ $form['id'] ] ) ):
533
  ?>
534
+ <div style="padding-left: 10px">
535
  <?php submit_button(); ?>
536
  </div>
537
  <?php endif; ?>
561
  if (typeof(localStorage) != 'undefined' ) {
562
  activetab = localStorage.getItem("activetab");
563
  }
564
+
565
+ //if url has section id as hash then set it as active or override the current local storage value
566
+ if(window.location.hash){
567
+ activetab = window.location.hash;
568
+ if (typeof(localStorage) != 'undefined' ) {
569
+ localStorage.setItem("activetab", activetab);
570
+ }
571
+ }
572
+
573
  if (activetab != '' && $(activetab).length ) {
574
  $(activetab).fadeIn();
575
  } else {
648
 
649
  }
650
 
651
+ endif;
package-lock.json DELETED
@@ -1,3687 +0,0 @@
1
- {
2
- "name": "dokan",
3
- "version": "2.6.8",
4
- "lockfileVersion": 1,
5
- "dependencies": {
6
- "abbrev": {
7
- "version": "1.1.1",
8
- "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
9
- "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
10
- "dev": true
11
- },
12
- "ajv": {
13
- "version": "5.2.3",
14
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.2.3.tgz",
15
- "integrity": "sha1-wG9Zh3jETGsWGrr+NGa4GtGBTtI=",
16
- "dev": true,
17
- "optional": true
18
- },
19
- "align-text": {
20
- "version": "0.1.4",
21
- "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
22
- "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
23
- "dev": true
24
- },
25
- "ansi-regex": {
26
- "version": "2.1.1",
27
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
28
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
29
- "dev": true
30
- },
31
- "ansi-styles": {
32
- "version": "2.2.1",
33
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
34
- "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
35
- "dev": true
36
- },
37
- "aproba": {
38
- "version": "1.2.0",
39
- "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
40
- "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="
41
- },
42
- "archive-type": {
43
- "version": "3.2.0",
44
- "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-3.2.0.tgz",
45
- "integrity": "sha1-nNnABpV+vpX62tW9YJiUKoE3N/Y=",
46
- "dev": true
47
- },
48
- "archiver": {
49
- "version": "1.3.0",
50
- "resolved": "https://registry.npmjs.org/archiver/-/archiver-1.3.0.tgz",
51
- "integrity": "sha1-TyGU1tj5nfP1MeaIHxTxXVX6ryI=",
52
- "dev": true,
53
- "dependencies": {
54
- "async": {
55
- "version": "2.5.0",
56
- "resolved": "https://registry.npmjs.org/async/-/async-2.5.0.tgz",
57
- "integrity": "sha512-e+lJAJeNWuPCNyxZKOBdaJGyLGHugXVQtrAwtuAe2vhxTYxFTKE73p8JuTmdH0qdQZtDvI4dhJwjZc5zsfIsYw==",
58
- "dev": true
59
- },
60
- "lodash": {
61
- "version": "4.17.4",
62
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
63
- "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
64
- "dev": true
65
- }
66
- }
67
- },
68
- "archiver-utils": {
69
- "version": "1.3.0",
70
- "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-1.3.0.tgz",
71
- "integrity": "sha1-5QtMCccL89aA4y/xt5lOn52JUXQ=",
72
- "dev": true,
73
- "dependencies": {
74
- "lodash": {
75
- "version": "4.17.4",
76
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
77
- "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
78
- "dev": true
79
- }
80
- }
81
- },
82
- "are-we-there-yet": {
83
- "version": "1.1.4",
84
- "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz",
85
- "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0="
86
- },
87
- "argparse": {
88
- "version": "1.0.9",
89
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz",
90
- "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=",
91
- "dev": true
92
- },
93
- "arr-diff": {
94
- "version": "2.0.0",
95
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
96
- "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
97
- "dev": true
98
- },
99
- "arr-flatten": {
100
- "version": "1.1.0",
101
- "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
102
- "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
103
- "dev": true
104
- },
105
- "array-differ": {
106
- "version": "1.0.0",
107
- "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz",
108
- "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=",
109
- "dev": true
110
- },
111
- "array-find-index": {
112
- "version": "1.0.2",
113
- "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
114
- "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
115
- "dev": true
116
- },
117
- "array-uniq": {
118
- "version": "1.0.3",
119
- "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
120
- "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
121
- "dev": true
122
- },
123
- "array-unique": {
124
- "version": "0.2.1",
125
- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
126
- "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
127
- "dev": true
128
- },
129
- "asap": {
130
- "version": "2.0.6",
131
- "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
132
- "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=",
133
- "dev": true,
134
- "optional": true
135
- },
136
- "asn1": {
137
- "version": "0.2.3",
138
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
139
- "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=",
140
- "dev": true
141
- },
142
- "assert-plus": {
143
- "version": "1.0.0",
144
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
145
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
146
- "dev": true
147
- },
148
- "async": {
149
- "version": "1.5.2",
150
- "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
151
- "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
152
- "dev": true
153
- },
154
- "async-each-series": {
155
- "version": "1.1.0",
156
- "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-1.1.0.tgz",
157
- "integrity": "sha1-9C/YFV048hpbjqB8KOBj7RcAsTg=",
158
- "dev": true,
159
- "optional": true
160
- },
161
- "asynckit": {
162
- "version": "0.4.0",
163
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
164
- "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
165
- "dev": true,
166
- "optional": true
167
- },
168
- "aws-sign2": {
169
- "version": "0.7.0",
170
- "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
171
- "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
172
- "dev": true,
173
- "optional": true
174
- },
175
- "aws4": {
176
- "version": "1.6.0",
177
- "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz",
178
- "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=",
179
- "dev": true,
180
- "optional": true
181
- },
182
- "balanced-match": {
183
- "version": "1.0.0",
184
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
185
- "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
186
- "dev": true
187
- },
188
- "bcrypt-pbkdf": {
189
- "version": "1.0.1",
190
- "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
191
- "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
192
- "dev": true,
193
- "optional": true
194
- },
195
- "beeper": {
196
- "version": "1.1.1",
197
- "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz",
198
- "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=",
199
- "dev": true
200
- },
201
- "bin-build": {
202
- "version": "2.2.0",
203
- "resolved": "https://registry.npmjs.org/bin-build/-/bin-build-2.2.0.tgz",
204
- "integrity": "sha1-EfjdYfcP/Por3KpbRvXo/t1CIcw=",
205
- "dev": true,
206
- "optional": true
207
- },
208
- "bin-check": {
209
- "version": "2.0.0",
210
- "resolved": "https://registry.npmjs.org/bin-check/-/bin-check-2.0.0.tgz",
211
- "integrity": "sha1-hvjm9CU4k99g3DFpV/WvAqywWTA=",
212
- "dev": true,
213
- "optional": true
214
- },
215
- "bin-version": {
216
- "version": "1.0.4",
217
- "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-1.0.4.tgz",
218
- "integrity": "sha1-nrSY7m/Xb3q5p8FgQ2+JV5Q1144=",
219
- "dev": true,
220
- "optional": true
221
- },
222
- "bin-version-check": {
223
- "version": "2.1.0",
224
- "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-2.1.0.tgz",
225
- "integrity": "sha1-5OXfKQuQaffRETJAMe/BP90RpbA=",
226
- "dev": true,
227
- "optional": true,
228
- "dependencies": {
229
- "semver": {
230
- "version": "4.3.6",
231
- "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz",
232
- "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=",
233
- "dev": true,
234
- "optional": true
235
- }
236
- }
237
- },
238
- "bin-wrapper": {
239
- "version": "3.0.2",
240
- "resolved": "https://registry.npmjs.org/bin-wrapper/-/bin-wrapper-3.0.2.tgz",
241
- "integrity": "sha1-Z9MwYmLksaXy+I7iNGT2plVneus=",
242
- "dev": true,
243
- "optional": true
244
- },
245
- "bl": {
246
- "version": "1.2.1",
247
- "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.1.tgz",
248
- "integrity": "sha1-ysMo977kVzDUBLaSID/LWQ4XLV4=",
249
- "dev": true
250
- },
251
- "block-stream": {
252
- "version": "0.0.9",
253
- "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
254
- "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo="
255
- },
256
- "bluebird": {
257
- "version": "3.5.1",
258
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz",
259
- "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==",
260
- "dev": true
261
- },
262
- "body-parser": {
263
- "version": "1.14.2",
264
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.14.2.tgz",
265
- "integrity": "sha1-EBXLH+LEQ4WCWVgdtTMy+NDPUPk=",
266
- "dev": true,
267
- "dependencies": {
268
- "iconv-lite": {
269
- "version": "0.4.13",
270
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz",
271
- "integrity": "sha1-H4irpKsLFQjoMSrMOTRfNumS4vI=",
272
- "dev": true
273
- },
274
- "qs": {
275
- "version": "5.2.0",
276
- "resolved": "https://registry.npmjs.org/qs/-/qs-5.2.0.tgz",
277
- "integrity": "sha1-qfMRQq9GjLcrJbMBNrokVoNJFr4=",
278
- "dev": true
279
- }
280
- }
281
- },
282
- "boom": {
283
- "version": "4.3.1",
284
- "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz",
285
- "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=",
286
- "dev": true,
287
- "optional": true
288
- },
289
- "brace-expansion": {
290
- "version": "1.1.8",
291
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
292
- "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
293
- "dev": true
294
- },
295
- "braces": {
296
- "version": "1.8.5",
297
- "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
298
- "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
299
- "dev": true
300
- },
301
- "browserify-zlib": {
302
- "version": "0.1.4",
303
- "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz",
304
- "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=",
305
- "dev": true
306
- },
307
- "buffer-crc32": {
308
- "version": "0.2.13",
309
- "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
310
- "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
311
- "dev": true
312
- },
313
- "buffer-to-vinyl": {
314
- "version": "1.1.0",
315
- "resolved": "https://registry.npmjs.org/buffer-to-vinyl/-/buffer-to-vinyl-1.1.0.tgz",
316
- "integrity": "sha1-APFfruOreh3aLN5tkSG//dB7ImI=",
317
- "dev": true,
318
- "dependencies": {
319
- "uuid": {
320
- "version": "2.0.3",
321
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz",
322
- "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=",
323
- "dev": true
324
- }
325
- }
326
- },
327
- "builtin-modules": {
328
- "version": "1.1.1",
329
- "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
330
- "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
331
- "dev": true
332
- },
333
- "bytes": {
334
- "version": "2.2.0",
335
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.2.0.tgz",
336
- "integrity": "sha1-/TVGSkA/b5EXwt42Cez/nK4ABYg=",
337
- "dev": true
338
- },
339
- "cache-swap": {
340
- "version": "0.3.0",
341
- "resolved": "https://registry.npmjs.org/cache-swap/-/cache-swap-0.3.0.tgz",
342
- "integrity": "sha1-HFQaoQilAQb2ML3Zj+HeyLoTP1E=",
343
- "dev": true,
344
- "dependencies": {
345
- "rimraf": {
346
- "version": "2.6.2",
347
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
348
- "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
349
- "dev": true
350
- }
351
- }
352
- },
353
- "camelcase": {
354
- "version": "2.1.1",
355
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
356
- "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
357
- "dev": true
358
- },
359
- "camelcase-keys": {
360
- "version": "2.1.0",
361
- "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
362
- "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
363
- "dev": true
364
- },
365
- "capture-stack-trace": {
366
- "version": "1.0.0",
367
- "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz",
368
- "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=",
369
- "dev": true
370
- },
371
- "caseless": {
372
- "version": "0.12.0",
373
- "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
374
- "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
375
- "dev": true,
376
- "optional": true
377
- },
378
- "caw": {
379
- "version": "1.2.0",
380
- "resolved": "https://registry.npmjs.org/caw/-/caw-1.2.0.tgz",
381
- "integrity": "sha1-/7Im/n78VHKI3GLuPpcHPCEtEDQ=",
382
- "dev": true,
383
- "dependencies": {
384
- "object-assign": {
385
- "version": "3.0.0",
386
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz",
387
- "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=",
388
- "dev": true
389
- },
390
- "tunnel-agent": {
391
- "version": "0.4.3",
392
- "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz",
393
- "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=",
394
- "dev": true
395
- }
396
- }
397
- },
398
- "center-align": {
399
- "version": "0.1.3",
400
- "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
401
- "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
402
- "dev": true
403
- },
404
- "chalk": {
405
- "version": "1.1.3",
406
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
407
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
408
- "dev": true
409
- },
410
- "chownr": {
411
- "version": "1.0.1",
412
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz",
413
- "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE="
414
- },
415
- "clap": {
416
- "version": "1.2.3",
417
- "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz",
418
- "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==",
419
- "dev": true,
420
- "optional": true
421
- },
422
- "cli": {
423
- "version": "1.0.1",
424
- "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz",
425
- "integrity": "sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ=",
426
- "dev": true,
427
- "dependencies": {
428
- "glob": {
429
- "version": "7.1.2",
430
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
431
- "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
432
- "dev": true
433
- }
434
- }
435
- },
436
- "cliui": {
437
- "version": "2.1.0",
438
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
439
- "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
440
- "dev": true
441
- },
442
- "clone": {
443
- "version": "1.0.2",
444
- "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz",
445
- "integrity": "sha1-Jgt6meux7f4kdTgXX3gyQ8sZ0Uk=",
446
- "dev": true
447
- },
448
- "clone-stats": {
449
- "version": "0.0.1",
450
- "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz",
451
- "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=",
452
- "dev": true
453
- },
454
- "co": {
455
- "version": "4.6.0",
456
- "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
457
- "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
458
- "dev": true,
459
- "optional": true
460
- },
461
- "coa": {
462
- "version": "1.0.4",
463
- "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz",
464
- "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=",
465
- "dev": true,
466
- "optional": true
467
- },
468
- "code-point-at": {
469
- "version": "1.1.0",
470
- "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
471
- "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
472
- },
473
- "coffee-script": {
474
- "version": "1.10.0",
475
- "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.10.0.tgz",
476
- "integrity": "sha1-EpOLz5vhlI+gBvkuDEyegXBRCMA=",
477
- "dev": true
478
- },
479
- "colors": {
480
- "version": "1.1.2",
481
- "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
482
- "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=",
483
- "dev": true
484
- },
485
- "combined-stream": {
486
- "version": "1.0.5",
487
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz",
488
- "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=",
489
- "dev": true
490
- },
491
- "commander": {
492
- "version": "2.8.1",
493
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz",
494
- "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=",
495
- "dev": true
496
- },
497
- "compress-commons": {
498
- "version": "1.2.1",
499
- "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-1.2.1.tgz",
500
- "integrity": "sha1-A77UVxhQv4dLQoOnNyaSh2j2Ry8=",
501
- "dev": true
502
- },
503
- "concat-map": {
504
- "version": "0.0.1",
505
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
506
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
507
- "dev": true
508
- },
509
- "concat-stream": {
510
- "version": "1.6.0",
511
- "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz",
512
- "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=",
513
- "dev": true
514
- },
515
- "console-browserify": {
516
- "version": "1.1.0",
517
- "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
518
- "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
519
- "dev": true
520
- },
521
- "console-control-strings": {
522
- "version": "1.1.0",
523
- "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
524
- "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4="
525
- },
526
- "console-stream": {
527
- "version": "0.1.1",
528
- "resolved": "https://registry.npmjs.org/console-stream/-/console-stream-0.1.1.tgz",
529
- "integrity": "sha1-oJX+B7IEZZVfL6/Si11yvM2UnUQ=",
530
- "dev": true,
531
- "optional": true
532
- },
533
- "content-type": {
534
- "version": "1.0.4",
535
- "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
536
- "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
537
- "dev": true
538
- },
539
- "convert-source-map": {
540
- "version": "1.5.0",
541
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz",
542
- "integrity": "sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU=",
543
- "dev": true
544
- },
545
- "core-util-is": {
546
- "version": "1.0.2",
547
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
548
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
549
- "dev": true
550
- },
551
- "crc": {
552
- "version": "3.5.0",
553
- "resolved": "https://registry.npmjs.org/crc/-/crc-3.5.0.tgz",
554
- "integrity": "sha1-mLi6fUiWZbo5efWbITgTdBAaGWQ=",
555
- "dev": true
556
- },
557
- "crc32-stream": {
558
- "version": "2.0.0",
559
- "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-2.0.0.tgz",
560
- "integrity": "sha1-483TtN8xaN10494/u8t7KX/pCPQ=",
561
- "dev": true
562
- },
563
- "create-error-class": {
564
- "version": "3.0.2",
565
- "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz",
566
- "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=",
567
- "dev": true
568
- },
569
- "cryptiles": {
570
- "version": "3.1.2",
571
- "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz",
572
- "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=",
573
- "dev": true,
574
- "optional": true,
575
- "dependencies": {
576
- "boom": {
577
- "version": "5.2.0",
578
- "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz",
579
- "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==",
580
- "dev": true,
581
- "optional": true
582
- }
583
- }
584
- },
585
- "csso": {
586
- "version": "2.0.0",
587
- "resolved": "https://registry.npmjs.org/csso/-/csso-2.0.0.tgz",
588
- "integrity": "sha1-F4tDpEYhIhwndWCG9THgL0KQDug=",
589
- "dev": true,
590
- "optional": true
591
- },
592
- "currently-unhandled": {
593
- "version": "0.4.1",
594
- "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
595
- "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
596
- "dev": true
597
- },
598
- "dashdash": {
599
- "version": "1.14.1",
600
- "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
601
- "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
602
- "dev": true,
603
- "optional": true
604
- },
605
- "date-now": {
606
- "version": "0.1.4",
607
- "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
608
- "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=",
609
- "dev": true
610
- },
611
- "dateformat": {
612
- "version": "1.0.12",
613
- "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz",
614
- "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=",
615
- "dev": true
616
- },
617
- "debug": {
618
- "version": "2.2.0",
619
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
620
- "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=",
621
- "dev": true
622
- },
623
- "decamelize": {
624
- "version": "1.2.0",
625
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
626
- "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
627
- "dev": true
628
- },
629
- "decompress": {
630
- "version": "3.0.0",
631
- "resolved": "https://registry.npmjs.org/decompress/-/decompress-3.0.0.tgz",
632
- "integrity": "sha1-rx3VDQbjv8QyRh033hGzjA2ZG+0=",
633
- "dev": true
634
- },
635
- "decompress-tar": {
636
- "version": "3.1.0",
637
- "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-3.1.0.tgz",
638
- "integrity": "sha1-IXx4n5uURQ76rcXF5TeXj8MzxGY=",
639
- "dev": true,
640
- "dependencies": {
641
- "clone": {
642
- "version": "0.2.0",
643
- "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz",
644
- "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=",
645
- "dev": true
646
- },
647
- "object-assign": {
648
- "version": "2.1.1",
649
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz",
650
- "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=",
651
- "dev": true
652
- },
653
- "vinyl": {
654
- "version": "0.4.6",
655
- "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz",
656
- "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=",
657
- "dev": true
658
- }
659
- }
660
- },
661
- "decompress-tarbz2": {
662
- "version": "3.1.0",
663
- "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-3.1.0.tgz",
664
- "integrity": "sha1-iyOTVoE1X58YnYclag+L3ZbZZm0=",
665
- "dev": true,
666
- "dependencies": {
667
- "clone": {
668
- "version": "0.2.0",
669
- "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz",
670
- "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=",
671
- "dev": true
672
- },
673
- "object-assign": {
674
- "version": "2.1.1",
675
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz",
676
- "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=",
677
- "dev": true
678
- },
679
- "vinyl": {
680
- "version": "0.4.6",
681
- "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz",
682
- "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=",
683
- "dev": true
684
- }
685
- }
686
- },
687
- "decompress-targz": {
688
- "version": "3.1.0",
689
- "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-3.1.0.tgz",
690
- "integrity": "sha1-ssE9+YFmJomRtxXWRH9kLpaW9aA=",
691
- "dev": true,
692
- "dependencies": {
693
- "clone": {
694
- "version": "0.2.0",
695
- "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz",
696
- "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=",
697
- "dev": true
698
- },
699
- "object-assign": {
700
- "version": "2.1.1",
701
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz",
702
- "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=",
703
- "dev": true
704
- },
705
- "vinyl": {
706
- "version": "0.4.6",
707
- "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz",
708
- "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=",
709
- "dev": true
710
- }
711
- }
712
- },
713
- "decompress-unzip": {
714
- "version": "3.4.0",
715
- "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-3.4.0.tgz",
716
- "integrity": "sha1-YUdbQVIGa74/7hL51inRX+ZHjus=",
717
- "dev": true,
718
- "dependencies": {
719
- "through2": {
720
- "version": "2.0.3",
721
- "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
722
- "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
723
- "dev": true
724
- }
725
- }
726
- },
727
- "deep-extend": {
728
- "version": "0.4.2",
729
- "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz",
730
- "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=",
731
- "dev": true
732
- },
733
- "define-properties": {
734
- "version": "1.1.2",
735
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz",
736
- "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=",
737
- "dev": true
738
- },
739
- "delayed-stream": {
740
- "version": "1.0.0",
741
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
742
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
743
- "dev": true
744
- },
745
- "delegates": {
746
- "version": "1.0.0",
747
- "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
748
- "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o="
749
- },
750
- "depd": {
751
- "version": "1.1.1",
752
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz",
753
- "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=",
754
- "dev": true
755
- },
756
- "detect-libc": {
757
- "version": "0.2.0",
758
- "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-0.2.0.tgz",
759
- "integrity": "sha1-R/31ZzSKF+wl/L8LnkRjSKdvn7U="
760
- },
761
- "dom-serializer": {
762
- "version": "0.1.0",
763
- "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz",
764
- "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=",
765
- "dev": true,
766
- "dependencies": {
767
- "domelementtype": {
768
- "version": "1.1.3",
769
- "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz",
770
- "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=",
771
- "dev": true
772
- },
773
- "entities": {
774
- "version": "1.1.1",
775
- "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz",
776
- "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=",
777
- "dev": true
778
- }
779
- }
780
- },
781
- "domelementtype": {
782
- "version": "1.3.0",
783
- "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz",
784
- "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=",
785
- "dev": true
786
- },
787
- "domhandler": {
788
- "version": "2.3.0",
789
- "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz",
790
- "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=",
791
- "dev": true
792
- },
793
- "domutils": {
794
- "version": "1.5.1",
795
- "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
796
- "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
797
- "dev": true
798
- },
799
- "download": {
800
- "version": "4.4.3",
801
- "resolved": "https://registry.npmjs.org/download/-/download-4.4.3.tgz",
802
- "integrity": "sha1-qlX9rTktldS2jowr4D4MKqIbqaw=",
803
- "dev": true
804
- },
805
- "duplexer2": {
806
- "version": "0.1.4",
807
- "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
808
- "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",
809
- "dev": true
810
- },
811
- "duplexify": {
812
- "version": "3.5.1",
813
- "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.1.tgz",
814
- "integrity": "sha512-j5goxHTwVED1Fpe5hh3q9R93Kip0Bg2KVAt4f8CEYM3UEwYcPSvWbXaUQOzdX/HtiNomipv+gU7ASQPDbV7pGQ==",
815
- "dev": true
816
- },
817
- "each-async": {
818
- "version": "1.1.1",
819
- "resolved": "https://registry.npmjs.org/each-async/-/each-async-1.1.1.tgz",
820
- "integrity": "sha1-3uUim98KtrogEqOV4bhpq/iBNHM=",
821
- "dev": true
822
- },
823
- "ecc-jsbn": {
824
- "version": "0.1.1",
825
- "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
826
- "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
827
- "dev": true,
828
- "optional": true
829
- },
830
- "ee-first": {
831
- "version": "1.1.1",
832
- "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
833
- "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
834
- "dev": true
835
- },
836
- "encoding": {
837
- "version": "0.1.12",
838
- "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz",
839
- "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=",
840
- "dev": true
841
- },
842
- "end-of-stream": {
843
- "version": "1.4.0",
844
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz",
845
- "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=",
846
- "dev": true
847
- },
848
- "entities": {
849
- "version": "1.0.0",
850
- "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz",
851
- "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=",
852
- "dev": true
853
- },
854
- "errno": {
855
- "version": "0.1.4",
856
- "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz",
857
- "integrity": "sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=",
858
- "dev": true,
859
- "optional": true
860
- },
861
- "error-ex": {
862
- "version": "1.3.1",
863
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz",
864
- "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=",
865
- "dev": true
866
- },
867
- "escape-string-regexp": {
868
- "version": "1.0.5",
869
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
870
- "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
871
- "dev": true
872
- },
873
- "esprima": {
874
- "version": "2.7.3",
875
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
876
- "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
877
- "dev": true
878
- },
879
- "eventemitter2": {
880
- "version": "0.4.14",
881
- "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz",
882
- "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=",
883
- "dev": true
884
- },
885
- "exec-buffer": {
886
- "version": "2.0.1",
887
- "resolved": "https://registry.npmjs.org/exec-buffer/-/exec-buffer-2.0.1.tgz",
888
- "integrity": "sha1-ACijG+CxRgth0HX5avRYO54zXqA=",
889
- "dev": true,
890
- "optional": true
891
- },
892
- "exec-series": {
893
- "version": "1.0.3",
894
- "resolved": "https://registry.npmjs.org/exec-series/-/exec-series-1.0.3.tgz",
895
- "integrity": "sha1-bSV6m+rEgqhyx3g7yGFYOfx3FDo=",
896
- "dev": true,
897
- "optional": true
898
- },
899
- "executable": {
900
- "version": "1.1.0",
901
- "resolved": "https://registry.npmjs.org/executable/-/executable-1.1.0.tgz",
902
- "integrity": "sha1-h3mA6REvM5EGbaNyZd562ENKtNk=",
903
- "dev": true,
904
- "optional": true
905
- },
906
- "exit": {
907
- "version": "0.1.2",
908
- "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
909
- "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
910
- "dev": true
911
- },
912
- "expand-brackets": {
913
- "version": "0.1.5",
914
- "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
915
- "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
916
- "dev": true
917
- },
918
- "expand-range": {
919
- "version": "1.8.2",
920
- "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
921
- "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
922
- "dev": true
923
- },
924
- "expand-template": {
925
- "version": "1.1.0",
926
- "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-1.1.0.tgz",
927
- "integrity": "sha512-kkjwkMqj0h4w/sb32ERCDxCQkREMCAgS39DscDnSwDsbxnwwM1BTZySdC3Bn1lhY7vL08n9GoO/fVTynjDgRyQ=="
928
- },
929
- "extend": {
930
- "version": "3.0.1",
931
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
932
- "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=",
933
- "dev": true
934
- },
935
- "extend-shallow": {
936
- "version": "2.0.1",
937
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
938
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
939
- "dev": true
940
- },
941
- "extglob": {
942
- "version": "0.3.2",
943
- "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
944
- "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
945
- "dev": true,
946
- "dependencies": {
947
- "is-extglob": {
948
- "version": "1.0.0",
949
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
950
- "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
951
- "dev": true
952
- }
953
- }
954
- },
955
- "extsprintf": {
956
- "version": "1.3.0",
957
- "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
958
- "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
959
- "dev": true
960
- },
961
- "fancy-log": {
962
- "version": "1.3.0",
963
- "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.0.tgz",
964
- "integrity": "sha1-Rb4X0Cu5kX1gzP/UmVyZnmyMmUg=",
965
- "dev": true
966
- },
967
- "fast-deep-equal": {
968
- "version": "1.0.0",
969
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz",
970
- "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=",
971
- "dev": true,
972
- "optional": true
973
- },
974
- "faye-websocket": {
975
- "version": "0.10.0",
976
- "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz",
977
- "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=",
978
- "dev": true
979
- },
980
- "fd-slicer": {
981
- "version": "1.0.1",
982
- "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz",
983
- "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=",
984
- "dev": true
985
- },
986
- "figures": {
987
- "version": "1.7.0",
988
- "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
989
- "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
990
- "dev": true
991
- },
992
- "file-sync-cmp": {
993
- "version": "0.1.1",
994
- "resolved": "https://registry.npmjs.org/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz",
995
- "integrity": "sha1-peeo/7+kk7Q7kju9TKiaU7Y7YSs=",
996
- "dev": true
997
- },
998
- "file-type": {
999
- "version": "3.9.0",
1000
- "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz",
1001
- "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=",
1002
- "dev": true
1003
- },
1004
- "filename-regex": {
1005
- "version": "2.0.1",
1006
- "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
1007
- "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=",
1008
- "dev": true
1009
- },
1010
- "filename-reserved-regex": {
1011
- "version": "1.0.0",
1012
- "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-1.0.0.tgz",
1013
- "integrity": "sha1-5hz4BfDeHJhFZ9A4bcXfUO5a9+Q=",
1014
- "dev": true
1015
- },
1016
- "filenamify": {
1017
- "version": "1.2.1",
1018
- "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-1.2.1.tgz",
1019
- "integrity": "sha1-qfL/0RxQO+0wABUCknI3jx8TZaU=",
1020
- "dev": true
1021
- },
1022
- "fill-range": {
1023
- "version": "2.2.3",
1024
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz",
1025
- "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=",
1026
- "dev": true
1027
- },
1028
- "find-up": {
1029
- "version": "1.1.2",
1030
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
1031
- "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
1032
- "dev": true
1033
- },
1034
- "find-versions": {
1035
- "version": "1.2.1",
1036
- "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-1.2.1.tgz",
1037
- "integrity": "sha1-y96fEuOFdaCvG+G5osXV/Y8Ya2I=",
1038
- "dev": true,
1039
- "optional": true
1040
- },
1041
- "findup-sync": {
1042
- "version": "0.3.0",
1043
- "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz",
1044
- "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=",
1045
- "dev": true,
1046
- "dependencies": {
1047
- "glob": {
1048
- "version": "5.0.15",
1049
- "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
1050
- "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
1051
- "dev": true
1052
- }
1053
- }
1054
- },
1055
- "first-chunk-stream": {
1056
- "version": "1.0.0",
1057
- "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz",
1058
- "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=",
1059
- "dev": true
1060
- },
1061
- "for-in": {
1062
- "version": "1.0.2",
1063
- "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
1064
- "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
1065
- "dev": true
1066
- },
1067
- "for-own": {
1068
- "version": "0.1.5",
1069
- "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
1070
- "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
1071
- "dev": true
1072
- },
1073
- "foreach": {
1074
- "version": "2.0.5",
1075
- "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz",
1076
- "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=",
1077
- "dev": true
1078
- },
1079
- "forever-agent": {
1080
- "version": "0.6.1",
1081
- "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
1082
- "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
1083
- "dev": true,
1084
- "optional": true
1085
- },
1086
- "form-data": {
1087
- "version": "2.3.1",
1088
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz",
1089
- "integrity": "sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8=",
1090
- "dev": true,
1091
- "optional": true
1092
- },
1093
- "fs.realpath": {
1094
- "version": "1.0.0",
1095
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
1096
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
1097
- "dev": true
1098
- },
1099
- "fstream": {
1100
- "version": "1.0.11",
1101
- "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz",
1102
- "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE="
1103
- },
1104
- "function-bind": {
1105
- "version": "1.1.1",
1106
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
1107
- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
1108
- "dev": true
1109
- },
1110
- "gauge": {
1111
- "version": "2.7.4",
1112
- "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
1113
- "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c="
1114
- },
1115
- "gaze": {
1116
- "version": "1.1.2",
1117
- "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.2.tgz",
1118
- "integrity": "sha1-hHIkZ3rbiHDWeSV+0ziP22HkAQU=",
1119
- "dev": true
1120
- },
1121
- "get-proxy": {
1122
- "version": "1.1.0",
1123
- "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-1.1.0.tgz",
1124
- "integrity": "sha1-iUhUSRvFkbDxR9euVw9cZ4tyVus=",
1125
- "dev": true
1126
- },
1127
- "get-stdin": {
1128
- "version": "4.0.1",
1129
- "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
1130
- "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
1131
- "dev": true
1132
- },
1133
- "getobject": {
1134
- "version": "0.1.0",
1135
- "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz",
1136
- "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=",
1137
- "dev": true
1138
- },
1139
- "getpass": {
1140
- "version": "0.1.7",
1141
- "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
1142
- "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
1143
- "dev": true,
1144
- "optional": true
1145
- },
1146
- "gettext-parser": {
1147
- "version": "1.3.0",
1148
- "resolved": "https://registry.npmjs.org/gettext-parser/-/gettext-parser-1.3.0.tgz",
1149
- "integrity": "sha512-iloxjcw+uTPnQ8DrGICWtqkHNgk3mAiDI77pLmXQCnhM+BxFQXstzTA4zj3EpIYMysRQnnNzHyHzBUEazz80Sw==",
1150
- "dev": true
1151
- },
1152
- "gifsicle": {
1153
- "version": "3.0.4",
1154
- "resolved": "https://registry.npmjs.org/gifsicle/-/gifsicle-3.0.4.tgz",
1155
- "integrity": "sha1-9Fy17RAWW2ZdySng6TKLbIId+js=",
1156
- "dev": true,
1157
- "optional": true
1158
- },
1159
- "github-from-package": {
1160
- "version": "0.0.0",
1161
- "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz",
1162
- "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4="
1163
- },
1164
- "glob": {
1165
- "version": "7.0.6",
1166
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz",
1167
- "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=",
1168
- "dev": true
1169
- },
1170
- "glob-base": {
1171
- "version": "0.3.0",
1172
- "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
1173
- "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
1174
- "dev": true,
1175
- "dependencies": {
1176
- "glob-parent": {
1177
- "version": "2.0.0",
1178
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
1179
- "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
1180
- "dev": true
1181
- },
1182
- "is-extglob": {
1183
- "version": "1.0.0",
1184
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
1185
- "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
1186
- "dev": true
1187
- },
1188
- "is-glob": {
1189
- "version": "2.0.1",
1190
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
1191
- "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
1192
- "dev": true
1193
- }
1194
- }
1195
- },
1196
- "glob-parent": {
1197
- "version": "3.1.0",
1198
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
1199
- "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
1200
- "dev": true
1201
- },
1202
- "glob-stream": {
1203
- "version": "5.3.5",
1204
- "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-5.3.5.tgz",
1205
- "integrity": "sha1-pVZlqajM3EGRWofHAeMtTgFvrSI=",
1206
- "dev": true,
1207
- "dependencies": {
1208
- "glob": {
1209
- "version": "5.0.15",
1210
- "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
1211
- "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
1212
- "dev": true
1213
- }
1214
- }
1215
- },
1216
- "globule": {
1217
- "version": "1.2.0",
1218
- "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.0.tgz",
1219
- "integrity": "sha1-HcScaCLdnoovoAuiopUAboZkvQk=",
1220
- "dev": true,
1221
- "dependencies": {
1222
- "glob": {
1223
- "version": "7.1.2",
1224
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
1225
- "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
1226
- "dev": true
1227
- },
1228
- "lodash": {
1229
- "version": "4.17.4",
1230
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
1231
- "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
1232
- "dev": true
1233
- }
1234
- }
1235
- },
1236
- "glogg": {
1237
- "version": "1.0.0",
1238
- "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.0.tgz",
1239
- "integrity": "sha1-f+DxmfV6yQbPUS/urY+Q7kooT8U=",
1240
- "dev": true
1241
- },
1242
- "got": {
1243
- "version": "5.7.1",
1244
- "resolved": "https://registry.npmjs.org/got/-/got-5.7.1.tgz",
1245
- "integrity": "sha1-X4FjWmHkplifGAVp6k44FoClHzU=",
1246
- "dev": true
1247
- },
1248
- "graceful-fs": {
1249
- "version": "4.1.11",
1250
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
1251
- "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
1252
- "dev": true
1253
- },
1254
- "graceful-readlink": {
1255
- "version": "1.0.1",
1256
- "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
1257
- "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=",
1258
- "dev": true
1259
- },
1260
- "grunt": {
1261
- "version": "1.0.1",
1262
- "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.0.1.tgz",
1263
- "integrity": "sha1-6HeHZOlEsY8yuw8QuQeEdcnftWs=",
1264
- "dev": true,
1265
- "dependencies": {
1266
- "grunt-cli": {
1267
- "version": "1.2.0",
1268
- "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.2.0.tgz",
1269
- "integrity": "sha1-VisRnrsGndtGSs4oRVAb6Xs1tqg=",
1270
- "dev": true
1271
- }
1272
- }
1273
- },
1274
- "grunt-contrib-clean": {
1275
- "version": "1.1.0",
1276
- "resolved": "https://registry.npmjs.org/grunt-contrib-clean/-/grunt-contrib-clean-1.1.0.tgz",
1277
- "integrity": "sha1-Vkq/LQN4qYOhW54/MO51tzjEBjg=",
1278
- "dev": true,
1279
- "dependencies": {
1280
- "rimraf": {
1281
- "version": "2.6.2",
1282
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
1283
- "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
1284
- "dev": true
1285
- }
1286
- }
1287
- },
1288
- "grunt-contrib-compress": {
1289
- "version": "1.4.3",
1290
- "resolved": "https://registry.npmjs.org/grunt-contrib-compress/-/grunt-contrib-compress-1.4.3.tgz",
1291
- "integrity": "sha1-Ac7/ucY39S5wgfRjdQmD0KOw+nM=",
1292
- "dev": true,
1293
- "dependencies": {
1294
- "lodash": {
1295
- "version": "4.17.4",
1296
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
1297
- "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
1298
- "dev": true
1299
- }
1300
- }
1301
- },
1302
- "grunt-contrib-concat": {
1303
- "version": "1.0.1",
1304
- "resolved": "https://registry.npmjs.org/grunt-contrib-concat/-/grunt-contrib-concat-1.0.1.tgz",
1305
- "integrity": "sha1-YVCYYwhOhx1+ht5IwBUlntl3Rb0=",
1306
- "dev": true
1307
- },
1308
- "grunt-contrib-copy": {
1309
- "version": "1.0.0",
1310
- "resolved": "https://registry.npmjs.org/grunt-contrib-copy/-/grunt-contrib-copy-1.0.0.tgz",
1311
- "integrity": "sha1-cGDGWB6QS4qw0A8HbgqPbj58NXM=",
1312
- "dev": true
1313
- },
1314
- "grunt-contrib-imagemin": {
1315
- "version": "1.0.1",
1316
- "resolved": "https://registry.npmjs.org/grunt-contrib-imagemin/-/grunt-contrib-imagemin-1.0.1.tgz",
1317
- "integrity": "sha1-5Ho1YTN29MqpwfkERlA8rhyUTXk=",
1318
- "dev": true,
1319
- "dependencies": {
1320
- "pretty-bytes": {
1321
- "version": "3.0.1",
1322
- "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-3.0.1.tgz",
1323
- "integrity": "sha1-J9AAjXeAY6C0gRuzXHnxvV1fvM8=",
1324
- "dev": true
1325
- }
1326
- }
1327
- },
1328
- "grunt-contrib-jshint": {
1329
- "version": "1.1.0",
1330
- "resolved": "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-1.1.0.tgz",
1331
- "integrity": "sha1-Np2QmyWTxA6L55lAshNAhQx5Oaw=",
1332
- "dev": true
1333
- },
1334
- "grunt-contrib-less": {
1335
- "version": "1.4.1",
1336
- "resolved": "https://registry.npmjs.org/grunt-contrib-less/-/grunt-contrib-less-1.4.1.tgz",
1337
- "integrity": "sha1-O73sC3XRLOqlXWKUNiXAsIYc328=",
1338
- "dev": true,
1339
- "dependencies": {
1340
- "async": {
1341
- "version": "2.5.0",
1342
- "resolved": "https://registry.npmjs.org/async/-/async-2.5.0.tgz",
1343
- "integrity": "sha512-e+lJAJeNWuPCNyxZKOBdaJGyLGHugXVQtrAwtuAe2vhxTYxFTKE73p8JuTmdH0qdQZtDvI4dhJwjZc5zsfIsYw==",
1344
- "dev": true
1345
- },
1346
- "lodash": {
1347
- "version": "4.17.4",
1348
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
1349
- "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
1350
- "dev": true
1351
- }
1352
- }
1353
- },
1354
- "grunt-contrib-uglify": {
1355
- "version": "2.3.0",
1356
- "resolved": "https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-2.3.0.tgz",
1357
- "integrity": "sha1-s9AmDr3WzvoS/y+Onh4ln33kIW8=",
1358
- "dev": true
1359
- },
1360
- "grunt-contrib-watch": {
1361
- "version": "1.0.0",
1362
- "resolved": "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-1.0.0.tgz",
1363
- "integrity": "sha1-hKGnodar0m7VaEE0lscxM+mQAY8=",
1364
- "dev": true
1365
- },
1366
- "grunt-known-options": {
1367
- "version": "1.1.0",
1368
- "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-1.1.0.tgz",
1369
- "integrity": "sha1-pCdO6zL6dl2lp6OxcSYXzjsUQUk=",
1370
- "dev": true
1371
- },
1372
- "grunt-legacy-log": {
1373
- "version": "1.0.0",
1374
- "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-1.0.0.tgz",
1375
- "integrity": "sha1-+4bxgJhHvAfcR4Q/ns1srLYt8tU=",
1376
- "dev": true
1377
- },
1378
- "grunt-legacy-log-utils": {
1379
- "version": "1.0.0",
1380
- "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-1.0.0.tgz",
1381
- "integrity": "sha1-p7ji0Ps1taUPSvmG/BEnSevJbz0=",
1382
- "dev": true,
1383
- "dependencies": {
1384
- "lodash": {
1385
- "version": "4.3.0",
1386
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.3.0.tgz",
1387
- "integrity": "sha1-79nEpuxT87BUEkKZFcPkgk5NJaQ=",
1388
- "dev": true
1389
- }
1390
- }
1391
- },
1392
- "grunt-legacy-util": {
1393
- "version": "1.0.0",
1394
- "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-1.0.0.tgz",
1395
- "integrity": "sha1-OGqnjcbtUJhsKxiVcmWxtIq7m4Y=",
1396
- "dev": true,
1397
- "dependencies": {
1398
- "lodash": {
1399
- "version": "4.3.0",
1400
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.3.0.tgz",
1401
- "integrity": "sha1-79nEpuxT87BUEkKZFcPkgk5NJaQ=",
1402
- "dev": true
1403
- }
1404
- }
1405
- },
1406
- "grunt-phplint": {
1407
- "version": "0.1.0",
1408
- "resolved": "https://registry.npmjs.org/grunt-phplint/-/grunt-phplint-0.1.0.tgz",
1409
- "integrity": "sha1-bb4uauxTqiKc+sCtmnyZ4kGEhI0=",
1410
- "dev": true,
1411
- "dependencies": {
1412
- "argparse": {
1413
- "version": "0.1.16",
1414
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz",
1415
- "integrity": "sha1-z9AeD7uj1srtBJ+9dY1A9lGW9Xw=",
1416
- "dev": true,
1417
- "dependencies": {
1418
- "underscore.string": {
1419
- "version": "2.4.0",
1420
- "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz",
1421
- "integrity": "sha1-jN2PusTi0uoefi6Al8QvRCKA+Fs=",
1422
- "dev": true
1423
- }
1424
- }
1425
- },
1426
- "async": {
1427
- "version": "0.1.22",
1428
- "resolved": "https://registry.npmjs.org/async/-/async-0.1.22.tgz",
1429
- "integrity": "sha1-D8GqoIig4+8Ovi2IMbqw3PiEUGE=",
1430
- "dev": true
1431
- },
1432
- "coffee-script": {
1433
- "version": "1.3.3",
1434
- "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.3.3.tgz",
1435
- "integrity": "sha1-FQ1rTLUiiUNp7+1qIQHCC8f0pPQ=",
1436
- "dev": true
1437
- },
1438
- "colors": {
1439
- "version": "0.6.2",
1440
- "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz",
1441
- "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=",
1442
- "dev": true
1443
- },
1444
- "dateformat": {
1445
- "version": "1.0.2-1.2.3",
1446
- "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.2-1.2.3.tgz",
1447
- "integrity": "sha1-sCIMAt6YYXQztyhRz0fePfLNvuk=",
1448
- "dev": true
1449
- },
1450
- "esprima": {
1451
- "version": "1.0.4",
1452
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz",
1453
- "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=",
1454
- "dev": true
1455
- },
1456
- "findup-sync": {
1457
- "version": "0.1.3",
1458
- "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.1.3.tgz",
1459
- "integrity": "sha1-fz56l7gjksZTvwZYm9hRkOk8NoM=",
1460
- "dev": true,
1461
- "dependencies": {
1462
- "glob": {
1463
- "version": "3.2.11",
1464
- "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz",
1465
- "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=",
1466
- "dev": true
1467
- },
1468
- "lodash": {
1469
- "version": "2.4.2",
1470
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
1471
- "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=",
1472
- "dev": true
1473
- },
1474
- "minimatch": {
1475
- "version": "0.3.0",
1476
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz",
1477
- "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=",
1478
- "dev": true
1479
- }
1480
- }
1481
- },
1482
- "glob": {
1483
- "version": "3.1.21",
1484
- "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz",
1485
- "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=",
1486
- "dev": true,
1487
- "dependencies": {
1488
- "inherits": {
1489
- "version": "1.0.2",
1490
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz",
1491
- "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=",
1492
- "dev": true
1493
- }
1494
- }
1495
- },
1496
- "graceful-fs": {
1497
- "version": "1.2.3",
1498
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz",
1499
- "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=",
1500
- "dev": true
1501
- },
1502
- "grunt": {
1503
- "version": "0.4.5",
1504
- "resolved": "https://registry.npmjs.org/grunt/-/grunt-0.4.5.tgz",
1505
- "integrity": "sha1-VpN81RlDJK3/bSB2MYMqnWuk5/A=",
1506
- "dev": true
1507
- },
1508
- "grunt-legacy-log": {
1509
- "version": "0.1.3",
1510
- "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-0.1.3.tgz",
1511
- "integrity": "sha1-7ClCboAwIa9ZAp+H0vnNczWgVTE=",
1512
- "dev": true,
1513
- "dependencies": {
1514
- "lodash": {
1515
- "version": "2.4.2",
1516
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
1517
- "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=",
1518
- "dev": true
1519
- },
1520
- "underscore.string": {
1521
- "version": "2.3.3",
1522
- "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz",
1523
- "integrity": "sha1-ccCL9rQosRM/N+ePo6Icgvcymw0=",
1524
- "dev": true
1525
- }
1526
- }
1527
- },
1528
- "grunt-legacy-log-utils": {
1529
- "version": "0.1.1",
1530
- "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-0.1.1.tgz",
1531
- "integrity": "sha1-wHBrndkGThFvNvI/5OawSGcsD34=",
1532
- "dev": true,
1533
- "dependencies": {
1534
- "lodash": {
1535
- "version": "2.4.2",
1536
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
1537
- "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=",
1538
- "dev": true
1539
- },
1540
- "underscore.string": {
1541
- "version": "2.3.3",
1542
- "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz",
1543
- "integrity": "sha1-ccCL9rQosRM/N+ePo6Icgvcymw0=",
1544
- "dev": true
1545
- }
1546
- }
1547
- },
1548
- "grunt-legacy-util": {
1549
- "version": "0.2.0",
1550
- "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-0.2.0.tgz",
1551
- "integrity": "sha1-kzJIhNv343qf98Am3/RR2UqeVUs=",
1552
- "dev": true
1553
- },
1554
- "iconv-lite": {
1555
- "version": "0.2.11",
1556
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz",
1557
- "integrity": "sha1-HOYKOleGSiktEyH/RgnKS7llrcg=",
1558
- "dev": true
1559
- },
1560
- "js-yaml": {
1561
- "version": "2.0.5",
1562
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-2.0.5.tgz",
1563
- "integrity": "sha1-olrmUJmZ6X3yeMZxnaEb0Gh3Q6g=",
1564
- "dev": true
1565
- },
1566
- "lodash": {
1567
- "version": "0.9.2",
1568
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-0.9.2.tgz",
1569
- "integrity": "sha1-jzSZxSRdNG1oLlsNO0B2fgnxqSw=",
1570
- "dev": true
1571
- },
1572
- "minimatch": {
1573
- "version": "0.2.14",
1574
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz",
1575
- "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=",
1576
- "dev": true
1577
- },
1578
- "nopt": {
1579
- "version": "1.0.10",
1580
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
1581
- "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=",
1582
- "dev": true
1583
- },
1584
- "underscore.string": {
1585
- "version": "2.2.1",
1586
- "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.2.1.tgz",
1587
- "integrity": "sha1-18D6KvXVoaZ/QlPa7pgTLnM/Dxk=",
1588
- "dev": true
1589
- },
1590
- "which": {
1591
- "version": "1.0.9",
1592
- "resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz",
1593
- "integrity": "sha1-RgwdoPgQED0DIam2M6+eV15kSG8=",
1594
- "dev": true
1595
- }
1596
- }
1597
- },
1598
- "grunt-ssh": {
1599
- "version": "0.12.9",
1600
- "resolved": "https://registry.npmjs.org/grunt-ssh/-/grunt-ssh-0.12.9.tgz",
1601
- "integrity": "sha1-IVUaNzmB8Ooo3HmdOKdp5UzU2QQ=",
1602
- "dev": true
1603
- },
1604
- "grunt-wp-i18n": {
1605
- "version": "1.0.0",
1606
- "resolved": "https://registry.npmjs.org/grunt-wp-i18n/-/grunt-wp-i18n-1.0.0.tgz",
1607
- "integrity": "sha1-ks0J6DXkV+4jiSYo6yNRYcxKZ5A=",
1608
- "dev": true
1609
- },
1610
- "gulp-decompress": {
1611
- "version": "1.2.0",
1612
- "resolved": "https://registry.npmjs.org/gulp-decompress/-/gulp-decompress-1.2.0.tgz",
1613
- "integrity": "sha1-jutlpeAV+O2FMsr+KEVJYGJvDcc=",
1614
- "dev": true
1615
- },
1616
- "gulp-rename": {
1617
- "version": "1.2.2",
1618
- "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.2.2.tgz",
1619
- "integrity": "sha1-OtRCh2PwXidk3sHGfYaNsnVoeBc=",
1620
- "dev": true
1621
- },
1622
- "gulp-sourcemaps": {
1623
- "version": "1.6.0",
1624
- "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz",
1625
- "integrity": "sha1-uG/zSdgBzrVuHZ59x7vLS33uYAw=",
1626
- "dev": true,
1627
- "dependencies": {
1628
- "through2": {
1629
- "version": "2.0.3",
1630
- "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
1631
- "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
1632
- "dev": true
1633
- }
1634
- }
1635
- },
1636
- "gulp-util": {
1637
- "version": "3.0.8",
1638
- "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz",
1639
- "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=",
1640
- "dev": true,
1641
- "dependencies": {
1642
- "dateformat": {
1643
- "version": "2.2.0",
1644
- "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz",
1645
- "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=",
1646
- "dev": true
1647
- },
1648
- "object-assign": {
1649
- "version": "3.0.0",
1650
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz",
1651
- "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=",
1652
- "dev": true
1653
- },
1654
- "through2": {
1655
- "version": "2.0.3",
1656
- "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
1657
- "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
1658
- "dev": true
1659
- },
1660
- "vinyl": {
1661
- "version": "0.5.3",
1662
- "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz",
1663
- "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=",
1664
- "dev": true
1665
- }
1666
- }
1667
- },
1668
- "gulplog": {
1669
- "version": "1.0.0",
1670
- "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz",
1671
- "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=",
1672
- "dev": true
1673
- },
1674
- "gzip-size": {
1675
- "version": "1.0.0",
1676
- "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-1.0.0.tgz",
1677
- "integrity": "sha1-Zs+LEBBHInuVus5uodoMF37Vwi8=",
1678
- "dev": true
1679
- },
1680
- "har-schema": {
1681
- "version": "2.0.0",
1682
- "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
1683
- "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
1684
- "dev": true,
1685
- "optional": true
1686
- },
1687
- "har-validator": {
1688
- "version": "5.0.3",
1689
- "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz",
1690
- "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=",
1691
- "dev": true,
1692
- "optional": true
1693
- },
1694
- "has-ansi": {
1695
- "version": "2.0.0",
1696
- "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
1697
- "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
1698
- "dev": true
1699
- },
1700
- "has-gulplog": {
1701
- "version": "0.1.0",
1702
- "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz",
1703
- "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=",
1704
- "dev": true
1705
- },
1706
- "has-unicode": {
1707
- "version": "2.0.1",
1708
- "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
1709
- "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk="
1710
- },
1711
- "hawk": {
1712
- "version": "6.0.2",
1713
- "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz",
1714
- "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==",
1715
- "dev": true,
1716
- "optional": true
1717
- },
1718
- "hoek": {
1719
- "version": "4.2.0",
1720
- "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz",
1721
- "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==",
1722
- "dev": true
1723
- },
1724
- "hooker": {
1725
- "version": "0.2.3",
1726
- "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz",
1727
- "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=",
1728
- "dev": true
1729
- },
1730
- "hosted-git-info": {
1731
- "version": "2.5.0",
1732
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz",
1733
- "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==",
1734
- "dev": true
1735
- },
1736
- "htmlparser2": {
1737
- "version": "3.8.3",
1738
- "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz",
1739
- "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=",
1740
- "dev": true,
1741
- "dependencies": {
1742
- "isarray": {
1743
- "version": "0.0.1",
1744
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
1745
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
1746
- "dev": true
1747
- },
1748
- "readable-stream": {
1749
- "version": "1.1.14",
1750
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
1751
- "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
1752
- "dev": true
1753
- },
1754
- "string_decoder": {
1755
- "version": "0.10.31",
1756
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
1757
- "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
1758
- "dev": true
1759
- }
1760
- }
1761
- },
1762
- "http-errors": {
1763
- "version": "1.3.1",
1764
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.3.1.tgz",
1765
- "integrity": "sha1-GX4izevUGYWF6GlO9nhhl7ke2UI=",
1766
- "dev": true
1767
- },
1768
- "http-parser-js": {
1769
- "version": "0.4.9",
1770
- "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.9.tgz",
1771
- "integrity": "sha1-6hoE+2St/wJC6ZdPKX3Uw8rSceE=",
1772
- "dev": true
1773
- },
1774
- "http-signature": {
1775
- "version": "1.2.0",
1776
- "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
1777
- "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
1778
- "dev": true,
1779
- "optional": true
1780
- },
1781
- "iconv-lite": {
1782
- "version": "0.4.19",
1783
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz",
1784
- "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==",
1785
- "dev": true
1786
- },
1787
- "iltorb": {
1788
- "version": "1.3.9",
1789
- "resolved": "https://registry.npmjs.org/iltorb/-/iltorb-1.3.9.tgz",
1790
- "integrity": "sha512-ry0dJz4CZuZya1UcDY7m9Yb+rdGmn4R86I0EoKgXmyNRzUdzM0kfR7G9Ioj9mH5aiDa/V9b0JaCH8S0JniveEA=="
1791
- },
1792
- "image-size": {
1793
- "version": "0.5.5",
1794
- "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz",
1795
- "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=",
1796
- "dev": true,
1797
- "optional": true
1798
- },
1799
- "imagemin": {
1800
- "version": "4.0.0",
1801
- "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-4.0.0.tgz",
1802
- "integrity": "sha1-6Q5/CTaDZZXxj6Ff6Qb0+iWeqEc=",
1803
- "dev": true
1804
- },
1805
- "imagemin-gifsicle": {
1806
- "version": "4.2.0",
1807
- "resolved": "https://registry.npmjs.org/imagemin-gifsicle/-/imagemin-gifsicle-4.2.0.tgz",
1808
- "integrity": "sha1-D++butNHbmt2iFc2zFsLh6CHV8o=",
1809
- "dev": true,
1810
- "optional": true
1811
- },
1812
- "imagemin-jpegtran": {
1813
- "version": "4.3.2",
1814
- "resolved": "https://registry.npmjs.org/imagemin-jpegtran/-/imagemin-jpegtran-4.3.2.tgz",
1815
- "integrity": "sha1-G8bR4r0T/bZNJFUm1jWn5d/rEvw=",
1816
- "dev": true,
1817
- "optional": true,
1818
- "dependencies": {
1819
- "through2": {
1820
- "version": "2.0.3",
1821
- "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
1822
- "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
1823
- "dev": true,
1824
- "optional": true
1825
- }
1826
- }
1827
- },
1828
- "imagemin-optipng": {
1829
- "version": "4.3.0",
1830
- "resolved": "https://registry.npmjs.org/imagemin-optipng/-/imagemin-optipng-4.3.0.tgz",
1831
- "integrity": "sha1-dgRmOrLuMVczJ0cm/Rw3TStErbY=",
1832
- "dev": true,
1833
- "optional": true
1834
- },
1835
- "imagemin-svgo": {
1836
- "version": "4.2.1",
1837
- "resolved": "https://registry.npmjs.org/imagemin-svgo/-/imagemin-svgo-4.2.1.tgz",
1838
- "integrity": "sha1-VPB9xW9HJgRi32phxUvvtEtXvlU=",
1839
- "dev": true,
1840
- "optional": true,
1841
- "dependencies": {
1842
- "through2": {
1843
- "version": "2.0.3",
1844
- "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
1845
- "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
1846
- "dev": true,
1847
- "optional": true
1848
- }
1849
- }
1850
- },
1851
- "indent-string": {
1852
- "version": "2.1.0",
1853
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
1854
- "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
1855
- "dev": true
1856
- },
1857
- "inflight": {
1858
- "version": "1.0.6",
1859
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
1860
- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
1861
- "dev": true
1862
- },
1863
- "inherits": {
1864
- "version": "2.0.3",
1865
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
1866
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
1867
- "dev": true
1868
- },
1869
- "ini": {
1870
- "version": "1.3.4",
1871
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz",
1872
- "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=",
1873
- "dev": true
1874
- },
1875
- "ip-regex": {
1876
- "version": "1.0.3",
1877
- "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-1.0.3.tgz",
1878
- "integrity": "sha1-3FiQdvZZ9BnCIgOaMzFvHHOH7/0=",
1879
- "dev": true,
1880
- "optional": true
1881
- },
1882
- "is-absolute": {
1883
- "version": "0.1.7",
1884
- "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.1.7.tgz",
1885
- "integrity": "sha1-hHSREZ/MtftDYhfMc39/qtUPYD8=",
1886
- "dev": true
1887
- },
1888
- "is-arrayish": {
1889
- "version": "0.2.1",
1890
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
1891
- "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
1892
- "dev": true
1893
- },
1894
- "is-buffer": {
1895
- "version": "1.1.5",
1896
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz",
1897
- "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=",
1898
- "dev": true
1899
- },
1900
- "is-builtin-module": {
1901
- "version": "1.0.0",
1902
- "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
1903
- "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
1904
- "dev": true
1905
- },
1906
- "is-bzip2": {
1907
- "version": "1.0.0",
1908
- "resolved": "https://registry.npmjs.org/is-bzip2/-/is-bzip2-1.0.0.tgz",
1909
- "integrity": "sha1-XuWOqlounIDiFAe+3yOuWsCRs/w=",
1910
- "dev": true
1911
- },
1912
- "is-dotfile": {
1913
- "version": "1.0.3",
1914
- "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
1915
- "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=",
1916
- "dev": true
1917
- },
1918
- "is-equal-shallow": {
1919
- "version": "0.1.3",
1920
- "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
1921
- "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
1922
- "dev": true
1923
- },
1924
- "is-extendable": {
1925
- "version": "0.1.1",
1926
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
1927
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
1928
- "dev": true
1929
- },
1930
- "is-extglob": {
1931
- "version": "2.1.1",
1932
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
1933
- "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
1934
- "dev": true
1935
- },
1936
- "is-finite": {
1937
- "version": "1.0.2",
1938
- "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
1939
- "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
1940
- "dev": true
1941
- },
1942
- "is-fullwidth-code-point": {
1943
- "version": "1.0.0",
1944
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
1945
- "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs="
1946
- },
1947
- "is-gif": {
1948
- "version": "1.0.0",
1949
- "resolved": "https://registry.npmjs.org/is-gif/-/is-gif-1.0.0.tgz",
1950
- "integrity": "sha1-ptKumIkwB7/6l6HYwB1jIFgyCX4=",
1951
- "dev": true,
1952
- "optional": true
1953
- },
1954
- "is-glob": {
1955
- "version": "3.1.0",
1956
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
1957
- "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
1958
- "dev": true
1959
- },
1960
- "is-gzip": {
1961
- "version": "1.0.0",
1962
- "resolved": "https://registry.npmjs.org/is-gzip/-/is-gzip-1.0.0.tgz",
1963
- "integrity": "sha1-bKiwe5nHeZgCWQDlVc7Y7YCHmoM=",
1964
- "dev": true
1965
- },
1966
- "is-jpg": {
1967
- "version": "1.0.0",
1968
- "resolved": "https://registry.npmjs.org/is-jpg/-/is-jpg-1.0.0.tgz",
1969
- "integrity": "sha1-KVnBfnNDDbOCZNp1uQ3VTy2G2hw=",
1970
- "dev": true,
1971
- "optional": true
1972
- },
1973
- "is-natural-number": {
1974
- "version": "2.1.1",
1975
- "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-2.1.1.tgz",
1976
- "integrity": "sha1-fUxXKDd+84bD4ZSpkRv1fG3DNec=",
1977
- "dev": true
1978
- },
1979
- "is-number": {
1980
- "version": "2.1.0",
1981
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
1982
- "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
1983
- "dev": true
1984
- },
1985
- "is-obj": {
1986
- "version": "1.0.1",
1987
- "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
1988
- "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
1989
- "dev": true
1990
- },
1991
- "is-png": {
1992
- "version": "1.1.0",
1993
- "resolved": "https://registry.npmjs.org/is-png/-/is-png-1.1.0.tgz",
1994
- "integrity": "sha1-1XSxK/J1wDUEVVcLDltXqwYgd84=",
1995
- "dev": true,
1996
- "optional": true
1997
- },
1998
- "is-posix-bracket": {
1999
- "version": "0.1.1",
2000
- "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
2001
- "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=",
2002
- "dev": true
2003
- },
2004
- "is-primitive": {
2005
- "version": "2.0.0",
2006
- "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
2007
- "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=",
2008
- "dev": true
2009
- },
2010
- "is-redirect": {
2011
- "version": "1.0.0",
2012
- "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz",
2013
- "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=",
2014
- "dev": true
2015
- },
2016
- "is-relative": {
2017
- "version": "0.1.3",
2018
- "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.1.3.tgz",
2019
- "integrity": "sha1-kF/uiuhvRbPsYUvDwVyGnfCHboI=",
2020
- "dev": true
2021
- },
2022
- "is-retry-allowed": {
2023
- "version": "1.1.0",
2024
- "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz",
2025
- "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=",
2026
- "dev": true
2027
- },
2028
- "is-stream": {
2029
- "version": "1.1.0",
2030
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
2031
- "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
2032
- "dev": true
2033
- },
2034
- "is-svg": {
2035
- "version": "1.1.1",
2036
- "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-1.1.1.tgz",
2037
- "integrity": "sha1-rA76r7ZTrFhHNwix+HNjbKEQ4xs=",
2038
- "dev": true,
2039
- "optional": true
2040
- },
2041
- "is-tar": {
2042
- "version": "1.0.0",
2043
- "resolved": "https://registry.npmjs.org/is-tar/-/is-tar-1.0.0.tgz",
2044
- "integrity": "sha1-L2suF5LB9bs2UZrKqdZcDSb+hT0=",
2045
- "dev": true
2046
- },
2047
- "is-typedarray": {
2048
- "version": "1.0.0",
2049
- "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
2050
- "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
2051
- "dev": true,
2052
- "optional": true
2053
- },
2054
- "is-url": {
2055
- "version": "1.2.2",
2056
- "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.2.tgz",
2057
- "integrity": "sha1-SYkFpZO/R8wtnn9zg3K792lsfyY=",
2058
- "dev": true
2059
- },
2060
- "is-utf8": {
2061
- "version": "0.2.1",
2062
- "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
2063
- "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
2064
- "dev": true
2065
- },
2066
- "is-valid-glob": {
2067
- "version": "0.3.0",
2068
- "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-0.3.0.tgz",
2069
- "integrity": "sha1-1LVcafUYhvm2XHDWwmItN+KfSP4=",
2070
- "dev": true
2071
- },
2072
- "is-zip": {
2073
- "version": "1.0.0",
2074
- "resolved": "https://registry.npmjs.org/is-zip/-/is-zip-1.0.0.tgz",
2075
- "integrity": "sha1-R7Co/004p2QxzP2ZqOFaTIa6IyU=",
2076
- "dev": true
2077
- },
2078
- "isarray": {
2079
- "version": "1.0.0",
2080
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
2081
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
2082
- "dev": true
2083
- },
2084
- "isexe": {
2085
- "version": "2.0.0",
2086
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
2087
- "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
2088
- "dev": true
2089
- },
2090
- "isobject": {
2091
- "version": "2.1.0",
2092
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
2093
- "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
2094
- "dev": true
2095
- },
2096
- "isstream": {
2097
- "version": "0.1.2",
2098
- "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
2099
- "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
2100
- "dev": true,
2101
- "optional": true
2102
- },
2103
- "jpegtran-bin": {
2104
- "version": "3.2.0",
2105
- "resolved": "https://registry.npmjs.org/jpegtran-bin/-/jpegtran-bin-3.2.0.tgz",
2106
- "integrity": "sha1-9g7PSumZwL2tLp+83ytvCYHnops=",
2107
- "dev": true,
2108
- "optional": true
2109
- },
2110
- "js-yaml": {
2111
- "version": "3.5.5",
2112
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.5.5.tgz",
2113
- "integrity": "sha1-A3fDgBfKvHMisNH7zSWkkWQfL74=",
2114
- "dev": true
2115
- },
2116
- "jsbn": {
2117
- "version": "0.1.1",
2118
- "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
2119
- "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
2120
- "dev": true,
2121
- "optional": true
2122
- },
2123
- "jshint": {
2124
- "version": "2.9.5",
2125
- "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.9.5.tgz",
2126
- "integrity": "sha1-HnJSkVzmgbQIJ+4UJIxG006apiw=",
2127
- "dev": true,
2128
- "dependencies": {
2129
- "lodash": {
2130
- "version": "3.7.0",
2131
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.7.0.tgz",
2132
- "integrity": "sha1-Nni9irmVBXwHreg27S7wh9qBHUU=",
2133
- "dev": true
2134
- },
2135
- "strip-json-comments": {
2136
- "version": "1.0.4",
2137
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz",
2138
- "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=",
2139
- "dev": true
2140
- }
2141
- }
2142
- },
2143
- "json-schema": {
2144
- "version": "0.2.3",
2145
- "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
2146
- "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
2147
- "dev": true,
2148
- "optional": true
2149
- },
2150
- "json-schema-traverse": {
2151
- "version": "0.3.1",
2152
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
2153
- "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
2154
- "dev": true,
2155
- "optional": true
2156
- },
2157
- "json-stable-stringify": {
2158
- "version": "1.0.1",
2159
- "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz",
2160
- "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=",
2161
- "dev": true
2162
- },
2163
- "json-stringify-safe": {
2164
- "version": "5.0.1",
2165
- "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
2166
- "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
2167
- "dev": true,
2168
- "optional": true
2169
- },
2170
- "jsonify": {
2171
- "version": "0.0.0",
2172
- "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
2173
- "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
2174
- "dev": true
2175
- },
2176
- "jsprim": {
2177
- "version": "1.4.1",
2178
- "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
2179
- "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
2180
- "dev": true,
2181
- "optional": true
2182
- },
2183
- "kind-of": {
2184
- "version": "3.2.2",
2185
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
2186
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
2187
- "dev": true
2188
- },
2189
- "lazy-cache": {
2190
- "version": "1.0.4",
2191
- "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
2192
- "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=",
2193
- "dev": true
2194
- },
2195
- "lazy-req": {
2196
- "version": "1.1.0",
2197
- "resolved": "https://registry.npmjs.org/lazy-req/-/lazy-req-1.1.0.tgz",
2198
- "integrity": "sha1-va6+rTD42CQDnODOFJ1Nqge6H6w=",
2199
- "dev": true,
2200
- "optional": true
2201
- },
2202
- "lazystream": {
2203
- "version": "1.0.0",
2204
- "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz",
2205
- "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=",
2206
- "dev": true
2207
- },
2208
- "less": {
2209
- "version": "2.7.2",
2210
- "resolved": "https://registry.npmjs.org/less/-/less-2.7.2.tgz",
2211
- "integrity": "sha1-No1sxz4fsDmBGDKAkYdDxdz5s98=",
2212
- "dev": true
2213
- },
2214
- "livereload-js": {
2215
- "version": "2.2.2",
2216
- "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.2.2.tgz",
2217
- "integrity": "sha1-bIclfmSKtHW8JOoldFftzB+NC8I=",
2218
- "dev": true
2219
- },
2220
- "load-json-file": {
2221
- "version": "1.1.0",
2222
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
2223
- "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
2224
- "dev": true
2225
- },
2226
- "lodash": {
2227
- "version": "3.10.1",
2228
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
2229
- "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=",
2230
- "dev": true
2231
- },
2232
- "lodash._basecopy": {
2233
- "version": "3.0.1",
2234
- "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz",
2235
- "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=",
2236
- "dev": true
2237
- },
2238
- "lodash._basetostring": {
2239
- "version": "3.0.1",
2240
- "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz",
2241
- "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=",
2242
- "dev": true
2243
- },
2244
- "lodash._basevalues": {
2245
- "version": "3.0.0",
2246
- "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz",
2247
- "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=",
2248
- "dev": true
2249
- },
2250
- "lodash._getnative": {
2251
- "version": "3.9.1",
2252
- "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz",
2253
- "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=",
2254
- "dev": true
2255
- },
2256
- "lodash._isiterateecall": {
2257
- "version": "3.0.9",
2258
- "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz",
2259
- "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=",
2260
- "dev": true
2261
- },
2262
- "lodash._reescape": {
2263
- "version": "3.0.0",
2264
- "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz",
2265
- "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=",
2266
- "dev": true
2267
- },
2268
- "lodash._reevaluate": {
2269
- "version": "3.0.0",
2270
- "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz",
2271
- "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=",
2272
- "dev": true
2273
- },
2274
- "lodash._reinterpolate": {
2275
- "version": "3.0.0",
2276
- "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
2277
- "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=",
2278
- "dev": true
2279
- },
2280
- "lodash._root": {
2281
- "version": "3.0.1",
2282
- "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz",
2283
- "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=",
2284
- "dev": true
2285
- },
2286
- "lodash.escape": {
2287
- "version": "3.2.0",
2288
- "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz",
2289
- "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=",
2290
- "dev": true
2291
- },
2292
- "lodash.isarguments": {
2293
- "version": "3.1.0",
2294
- "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
2295
- "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=",
2296
- "dev": true
2297
- },
2298
- "lodash.isarray": {
2299
- "version": "3.0.4",
2300
- "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz",
2301
- "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=",
2302
- "dev": true
2303
- },
2304
- "lodash.isequal": {
2305
- "version": "4.5.0",
2306
- "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
2307
- "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=",
2308
- "dev": true
2309
- },
2310
- "lodash.keys": {
2311
- "version": "3.1.2",
2312
- "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz",
2313
- "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=",
2314
- "dev": true
2315
- },
2316
- "lodash.restparam": {
2317
- "version": "3.6.1",
2318
- "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz",
2319
- "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=",
2320
- "dev": true
2321
- },
2322
- "lodash.template": {
2323
- "version": "3.6.2",
2324
- "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz",
2325
- "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=",
2326
- "dev": true
2327
- },
2328
- "lodash.templatesettings": {
2329
- "version": "3.1.1",
2330
- "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz",
2331
- "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=",
2332
- "dev": true
2333
- },
2334
- "logalot": {
2335
- "version": "2.1.0",
2336
- "resolved": "https://registry.npmjs.org/logalot/-/logalot-2.1.0.tgz",
2337
- "integrity": "sha1-X46MkNME7fElMJUaVVSruMXj9VI=",
2338
- "dev": true,
2339
- "optional": true
2340
- },
2341
- "longest": {
2342
- "version": "1.0.1",
2343
- "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
2344
- "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=",
2345
- "dev": true
2346
- },
2347
- "loud-rejection": {
2348
- "version": "1.6.0",
2349
- "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
2350
- "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
2351
- "dev": true
2352
- },
2353
- "lowercase-keys": {
2354
- "version": "1.0.0",
2355
- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz",
2356
- "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=",
2357
- "dev": true
2358
- },
2359
- "lpad-align": {
2360
- "version": "1.1.2",
2361
- "resolved": "https://registry.npmjs.org/lpad-align/-/lpad-align-1.1.2.tgz",
2362
- "integrity": "sha1-IfYArBwwlcPG5JfuZyce4ISB/p4=",
2363
- "dev": true,
2364
- "optional": true
2365
- },
2366
- "lru-cache": {
2367
- "version": "2.7.3",
2368
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz",
2369
- "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=",
2370
- "dev": true
2371
- },
2372
- "map-obj": {
2373
- "version": "1.0.1",
2374
- "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
2375
- "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
2376
- "dev": true
2377
- },
2378
- "maxmin": {
2379
- "version": "1.1.0",
2380
- "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-1.1.0.tgz",
2381
- "integrity": "sha1-cTZehKmd2Piz99X94vANHn9zvmE=",
2382
- "dev": true,
2383
- "dependencies": {
2384
- "pretty-bytes": {
2385
- "version": "1.0.4",
2386
- "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz",
2387
- "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=",
2388
- "dev": true
2389
- }
2390
- }
2391
- },
2392
- "media-typer": {
2393
- "version": "0.3.0",
2394
- "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
2395
- "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
2396
- "dev": true
2397
- },
2398
- "meow": {
2399
- "version": "3.7.0",
2400
- "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
2401
- "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
2402
- "dev": true
2403
- },
2404
- "merge-stream": {
2405
- "version": "1.0.1",
2406
- "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz",
2407
- "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=",
2408
- "dev": true
2409
- },
2410
- "micromatch": {
2411
- "version": "2.3.11",
2412
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
2413
- "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
2414
- "dev": true,
2415
- "dependencies": {
2416
- "is-extglob": {
2417
- "version": "1.0.0",
2418
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
2419
- "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
2420
- "dev": true
2421
- },
2422
- "is-glob": {
2423
- "version": "2.0.1",
2424
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
2425
- "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
2426
- "dev": true
2427
- }
2428
- }
2429
- },
2430
- "mime": {
2431
- "version": "1.4.1",
2432
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
2433
- "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==",
2434
- "dev": true,
2435
- "optional": true
2436
- },
2437
- "mime-db": {
2438
- "version": "1.30.0",
2439
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz",
2440
- "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=",
2441
- "dev": true
2442
- },
2443
- "mime-types": {
2444
- "version": "2.1.17",
2445
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz",
2446
- "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=",
2447
- "dev": true
2448
- },
2449
- "minimatch": {
2450
- "version": "3.0.4",
2451
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
2452
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
2453
- "dev": true
2454
- },
2455
- "minimist": {
2456
- "version": "1.2.0",
2457
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
2458
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
2459
- "dev": true
2460
- },
2461
- "mkdirp": {
2462
- "version": "0.5.1",
2463
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
2464
- "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
2465
- "dev": true,
2466
- "dependencies": {
2467
- "minimist": {
2468
- "version": "0.0.8",
2469
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
2470
- "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
2471
- "dev": true
2472
- }
2473
- }
2474
- },
2475
- "ms": {
2476
- "version": "0.7.1",
2477
- "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz",
2478
- "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=",
2479
- "dev": true
2480
- },
2481
- "multipipe": {
2482
- "version": "0.1.2",
2483
- "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz",
2484
- "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=",
2485
- "dev": true,
2486
- "dependencies": {
2487
- "duplexer2": {
2488
- "version": "0.0.2",
2489
- "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz",
2490
- "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=",
2491
- "dev": true
2492
- },
2493
- "isarray": {
2494
- "version": "0.0.1",
2495
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
2496
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
2497
- "dev": true
2498
- },
2499
- "readable-stream": {
2500
- "version": "1.1.14",
2501
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
2502
- "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
2503
- "dev": true
2504
- },
2505
- "string_decoder": {
2506
- "version": "0.10.31",
2507
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
2508
- "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
2509
- "dev": true
2510
- }
2511
- }
2512
- },
2513
- "nan": {
2514
- "version": "2.7.0",
2515
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.7.0.tgz",
2516
- "integrity": "sha1-2Vv3IeyHfgjbJ27T/G63j5CDrUY="
2517
- },
2518
- "node-abi": {
2519
- "version": "2.1.1",
2520
- "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.1.1.tgz",
2521
- "integrity": "sha512-6oxV13poCOv7TfGvhsSz6XZWpXeKkdGVh72++cs33OfMh3KAX8lN84dCvmqSETyDXAFcUHtV7eJrgFBoOqZbNQ=="
2522
- },
2523
- "node-gyp": {
2524
- "version": "3.6.2",
2525
- "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.6.2.tgz",
2526
- "integrity": "sha1-m/vlRWIoYoSDjnUOrAUpWFP6HGA=",
2527
- "dependencies": {
2528
- "semver": {
2529
- "version": "5.3.0",
2530
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
2531
- "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8="
2532
- }
2533
- }
2534
- },
2535
- "node-status-codes": {
2536
- "version": "1.0.0",
2537
- "resolved": "https://registry.npmjs.org/node-status-codes/-/node-status-codes-1.0.0.tgz",
2538
- "integrity": "sha1-WuVUHQJGRdMqWPzdyc7s6nrjrC8=",
2539
- "dev": true
2540
- },
2541
- "node-wp-i18n": {
2542
- "version": "1.0.2",
2543
- "resolved": "https://registry.npmjs.org/node-wp-i18n/-/node-wp-i18n-1.0.2.tgz",
2544
- "integrity": "sha1-fwKe9busKlzBazCwkG7R4OVykHA=",
2545
- "dev": true,
2546
- "dependencies": {
2547
- "lodash": {
2548
- "version": "4.17.4",
2549
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
2550
- "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
2551
- "dev": true
2552
- }
2553
- }
2554
- },
2555
- "noop-logger": {
2556
- "version": "0.1.1",
2557
- "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz",
2558
- "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI="
2559
- },
2560
- "nopt": {
2561
- "version": "3.0.6",
2562
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
2563
- "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
2564
- "dev": true
2565
- },
2566
- "normalize-package-data": {
2567
- "version": "2.4.0",
2568
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
2569
- "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
2570
- "dev": true
2571
- },
2572
- "normalize-path": {
2573
- "version": "2.1.1",
2574
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
2575
- "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
2576
- "dev": true
2577
- },
2578
- "npmlog": {
2579
- "version": "4.1.2",
2580
- "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
2581
- "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg=="
2582
- },
2583
- "number-is-nan": {
2584
- "version": "1.0.1",
2585
- "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
2586
- "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
2587
- "dev": true
2588
- },
2589
- "oauth-sign": {
2590
- "version": "0.8.2",
2591
- "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
2592
- "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=",
2593
- "dev": true,
2594
- "optional": true
2595
- },
2596
- "object-assign": {
2597
- "version": "4.1.1",
2598
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
2599
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
2600
- "dev": true
2601
- },
2602
- "object-keys": {
2603
- "version": "1.0.11",
2604
- "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz",
2605
- "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=",
2606
- "dev": true
2607
- },
2608
- "object.assign": {
2609
- "version": "4.0.4",
2610
- "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.0.4.tgz",
2611
- "integrity": "sha1-scnMBE7xuf5jYG/BQau7MuFHMMw=",
2612
- "dev": true
2613
- },
2614
- "object.omit": {
2615
- "version": "2.0.1",
2616
- "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
2617
- "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
2618
- "dev": true
2619
- },
2620
- "on-finished": {
2621
- "version": "2.3.0",
2622
- "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
2623
- "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
2624
- "dev": true
2625
- },
2626
- "once": {
2627
- "version": "1.4.0",
2628
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
2629
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
2630
- "dev": true
2631
- },
2632
- "onetime": {
2633
- "version": "1.1.0",
2634
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz",
2635
- "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=",
2636
- "dev": true
2637
- },
2638
- "optional": {
2639
- "version": "0.1.4",
2640
- "resolved": "https://registry.npmjs.org/optional/-/optional-0.1.4.tgz",
2641
- "integrity": "sha512-gtvrrCfkE08wKcgXaVwQVgwEQ8vel2dc5DDBn9RLQZ3YtmtkBss6A2HY6BnJH4N/4Ku97Ri/SF8sNWE2225WJw==",
2642
- "dev": true
2643
- },
2644
- "optipng-bin": {
2645
- "version": "3.1.4",
2646
- "resolved": "https://registry.npmjs.org/optipng-bin/-/optipng-bin-3.1.4.tgz",
2647
- "integrity": "sha1-ldNPLEiHBPb9cGBr/qDGWfHZXYQ=",
2648
- "dev": true,
2649
- "optional": true
2650
- },
2651
- "ordered-read-streams": {
2652
- "version": "0.3.0",
2653
- "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz",
2654
- "integrity": "sha1-cTfmmzKYuzQiR6G77jiByA4v14s=",
2655
- "dev": true
2656
- },
2657
- "os-filter-obj": {
2658
- "version": "1.0.3",
2659
- "resolved": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-1.0.3.tgz",
2660
- "integrity": "sha1-WRUzDZDs7VV9LZOKMcbdIU2cY60=",
2661
- "dev": true,
2662
- "optional": true
2663
- },
2664
- "os-homedir": {
2665
- "version": "1.0.2",
2666
- "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
2667
- "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M="
2668
- },
2669
- "os-tmpdir": {
2670
- "version": "1.0.2",
2671
- "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
2672
- "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
2673
- "dev": true
2674
- },
2675
- "osenv": {
2676
- "version": "0.1.4",
2677
- "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz",
2678
- "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ="
2679
- },
2680
- "pako": {
2681
- "version": "0.2.9",
2682
- "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
2683
- "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=",
2684
- "dev": true
2685
- },
2686
- "parse-glob": {
2687
- "version": "3.0.4",
2688
- "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
2689
- "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
2690
- "dev": true,
2691
- "dependencies": {
2692
- "is-extglob": {
2693
- "version": "1.0.0",
2694
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
2695
- "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
2696
- "dev": true
2697
- },
2698
- "is-glob": {
2699
- "version": "2.0.1",
2700
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
2701
- "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
2702
- "dev": true
2703
- }
2704
- }
2705
- },
2706
- "parse-json": {
2707
- "version": "2.2.0",
2708
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
2709
- "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
2710
- "dev": true
2711
- },
2712
- "parseurl": {
2713
- "version": "1.3.2",
2714
- "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
2715
- "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=",
2716
- "dev": true
2717
- },
2718
- "path-dirname": {
2719
- "version": "1.0.2",
2720
- "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
2721
- "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
2722
- "dev": true
2723
- },
2724
- "path-exists": {
2725
- "version": "2.1.0",
2726
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
2727
- "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
2728
- "dev": true
2729
- },
2730
- "path-is-absolute": {
2731
- "version": "1.0.1",
2732
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
2733
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
2734
- "dev": true
2735
- },
2736
- "path-type": {
2737
- "version": "1.1.0",
2738
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
2739
- "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
2740
- "dev": true
2741
- },
2742
- "pend": {
2743
- "version": "1.2.0",
2744
- "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
2745
- "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
2746
- "dev": true
2747
- },
2748
- "performance-now": {
2749
- "version": "2.1.0",
2750
- "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
2751
- "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
2752
- "dev": true,
2753
- "optional": true
2754
- },
2755
- "pify": {
2756
- "version": "2.3.0",
2757
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
2758
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
2759
- "dev": true
2760
- },
2761
- "pinkie": {
2762
- "version": "2.0.4",
2763
- "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
2764
- "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
2765
- "dev": true
2766
- },
2767
- "pinkie-promise": {
2768
- "version": "2.0.1",
2769
- "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
2770
- "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
2771
- "dev": true
2772
- },
2773
- "prebuild-install": {
2774
- "version": "2.3.0",
2775
- "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-2.3.0.tgz",
2776
- "integrity": "sha512-gzjq2oHB8oMbzJSsSh9MQ64zrXZGt092/uT4TLZlz2qnrPxpWqp4vYB7LZrDxnlxf5RfbCjkgDI/z0EIVuYzAw=="
2777
- },
2778
- "prepend-http": {
2779
- "version": "1.0.4",
2780
- "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
2781
- "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
2782
- "dev": true
2783
- },
2784
- "preserve": {
2785
- "version": "0.2.0",
2786
- "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
2787
- "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=",
2788
- "dev": true
2789
- },
2790
- "pretty-bytes": {
2791
- "version": "4.0.2",
2792
- "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz",
2793
- "integrity": "sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=",
2794
- "dev": true
2795
- },
2796
- "process-nextick-args": {
2797
- "version": "1.0.7",
2798
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
2799
- "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
2800
- "dev": true
2801
- },
2802
- "progress": {
2803
- "version": "1.1.8",
2804
- "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz",
2805
- "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=",
2806
- "dev": true
2807
- },
2808
- "promise": {
2809
- "version": "7.3.1",
2810
- "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
2811
- "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
2812
- "dev": true,
2813
- "optional": true
2814
- },
2815
- "prr": {
2816
- "version": "0.0.0",
2817
- "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz",
2818
- "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=",
2819
- "dev": true,
2820
- "optional": true
2821
- },
2822
- "pump": {
2823
- "version": "1.0.2",
2824
- "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.2.tgz",
2825
- "integrity": "sha1-Oz7mUS+U8OV1U4wXmV+fFpkKXVE="
2826
- },
2827
- "punycode": {
2828
- "version": "1.4.1",
2829
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
2830
- "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
2831
- "dev": true,
2832
- "optional": true
2833
- },
2834
- "q": {
2835
- "version": "1.5.0",
2836
- "resolved": "https://registry.npmjs.org/q/-/q-1.5.0.tgz",
2837
- "integrity": "sha1-3QG6ydBtMObyGa7LglPunr3DCPE=",
2838
- "dev": true,
2839
- "optional": true
2840
- },
2841
- "qs": {
2842
- "version": "6.5.1",
2843
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz",
2844
- "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==",
2845
- "dev": true,
2846
- "optional": true
2847
- },
2848
- "randomatic": {
2849
- "version": "1.1.7",
2850
- "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz",
2851
- "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==",
2852
- "dev": true,
2853
- "dependencies": {
2854
- "is-number": {
2855
- "version": "3.0.0",
2856
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
2857
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
2858
- "dev": true,
2859
- "dependencies": {
2860
- "kind-of": {
2861
- "version": "3.2.2",
2862
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
2863
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
2864
- "dev": true
2865
- }
2866
- }
2867
- },
2868
- "kind-of": {
2869
- "version": "4.0.0",
2870
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
2871
- "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
2872
- "dev": true
2873
- }
2874
- }
2875
- },
2876
- "raw-body": {
2877
- "version": "2.1.7",
2878
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.1.7.tgz",
2879
- "integrity": "sha1-rf6s4uT7MJgFgBTQjActzFl1h3Q=",
2880
- "dev": true,
2881
- "dependencies": {
2882
- "bytes": {
2883
- "version": "2.4.0",
2884
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz",
2885
- "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk=",
2886
- "dev": true
2887
- },
2888
- "iconv-lite": {
2889
- "version": "0.4.13",
2890
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz",
2891
- "integrity": "sha1-H4irpKsLFQjoMSrMOTRfNumS4vI=",
2892
- "dev": true
2893
- }
2894
- }
2895
- },
2896
- "rc": {
2897
- "version": "1.2.1",
2898
- "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz",
2899
- "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=",
2900
- "dev": true
2901
- },
2902
- "read-all-stream": {
2903
- "version": "3.1.0",
2904
- "resolved": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz",
2905
- "integrity": "sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po=",
2906
- "dev": true
2907
- },
2908
- "read-pkg": {
2909
- "version": "1.1.0",
2910
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
2911
- "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
2912
- "dev": true
2913
- },
2914
- "read-pkg-up": {
2915
- "version": "1.0.1",
2916
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
2917
- "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
2918
- "dev": true
2919
- },
2920
- "readable-stream": {
2921
- "version": "2.3.3",
2922
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
2923
- "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
2924
- "dev": true
2925
- },
2926
- "redent": {
2927
- "version": "1.0.0",
2928
- "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
2929
- "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
2930
- "dev": true
2931
- },
2932
- "regex-cache": {
2933
- "version": "0.4.4",
2934
- "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz",
2935
- "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==",
2936
- "dev": true
2937
- },
2938
- "remove-trailing-separator": {
2939
- "version": "1.1.0",
2940
- "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
2941
- "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
2942
- "dev": true
2943
- },
2944
- "repeat-element": {
2945
- "version": "1.1.2",
2946
- "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
2947
- "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
2948
- "dev": true
2949
- },
2950
- "repeat-string": {
2951
- "version": "1.6.1",
2952
- "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
2953
- "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
2954
- "dev": true
2955
- },
2956
- "repeating": {
2957
- "version": "2.0.1",
2958
- "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
2959
- "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
2960
- "dev": true
2961
- },
2962
- "replace-ext": {
2963
- "version": "0.0.1",
2964
- "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz",
2965
- "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=",
2966
- "dev": true
2967
- },
2968
- "request": {
2969
- "version": "2.83.0",
2970
- "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz",
2971
- "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==",
2972
- "dev": true,
2973
- "optional": true
2974
- },
2975
- "resolve": {
2976
- "version": "1.1.7",
2977
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
2978
- "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
2979
- "dev": true
2980
- },
2981
- "right-align": {
2982
- "version": "0.1.3",
2983
- "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
2984
- "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
2985
- "dev": true
2986
- },
2987
- "rimraf": {
2988
- "version": "2.2.8",
2989
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz",
2990
- "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=",
2991
- "dev": true
2992
- },
2993
- "safe-buffer": {
2994
- "version": "5.1.1",
2995
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
2996
- "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==",
2997
- "dev": true
2998
- },
2999
- "sax": {
3000
- "version": "1.2.4",
3001
- "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
3002
- "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
3003
- "dev": true,
3004
- "optional": true
3005
- },
3006
- "seek-bzip": {
3007
- "version": "1.0.5",
3008
- "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz",
3009
- "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=",
3010
- "dev": true
3011
- },
3012
- "semver": {
3013
- "version": "5.4.1",
3014
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz",
3015
- "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==",
3016
- "dev": true
3017
- },
3018
- "semver-regex": {
3019
- "version": "1.0.0",
3020
- "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-1.0.0.tgz",
3021
- "integrity": "sha1-kqSWkGX5xwxpR1PVUkj8aPj2Usk=",
3022
- "dev": true,
3023
- "optional": true
3024
- },
3025
- "semver-truncate": {
3026
- "version": "1.1.2",
3027
- "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-1.1.2.tgz",
3028
- "integrity": "sha1-V/Qd5pcHpicJp+AQS6IRcQnqR+g=",
3029
- "dev": true,
3030
- "optional": true
3031
- },
3032
- "set-blocking": {
3033
- "version": "2.0.0",
3034
- "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
3035
- "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
3036
- },
3037
- "set-immediate-shim": {
3038
- "version": "1.0.1",
3039
- "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz",
3040
- "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=",
3041
- "dev": true
3042
- },
3043
- "shelljs": {
3044
- "version": "0.3.0",
3045
- "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz",
3046
- "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=",
3047
- "dev": true
3048
- },
3049
- "sigmund": {
3050
- "version": "1.0.1",
3051
- "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
3052
- "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=",
3053
- "dev": true
3054
- },
3055
- "signal-exit": {
3056
- "version": "3.0.2",
3057
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
3058
- "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
3059
- "dev": true
3060
- },
3061
- "simple-get": {
3062
- "version": "1.4.3",
3063
- "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-1.4.3.tgz",
3064
- "integrity": "sha1-6XVe2kB+ltpAxeUVjJ6jezO+y+s="
3065
- },
3066
- "sntp": {
3067
- "version": "2.0.2",
3068
- "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.0.2.tgz",
3069
- "integrity": "sha1-UGQRDwr4X3z9t9a2ekACjOUrSys=",
3070
- "dev": true,
3071
- "optional": true
3072
- },
3073
- "source-map": {
3074
- "version": "0.5.7",
3075
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
3076
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
3077
- "dev": true
3078
- },
3079
- "sparkles": {
3080
- "version": "1.0.0",
3081
- "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz",
3082
- "integrity": "sha1-Gsu/tZJDbRC76PeFt8xvgoFQEsM=",
3083
- "dev": true
3084
- },
3085
- "spdx-correct": {
3086
- "version": "1.0.2",
3087
- "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz",
3088
- "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=",
3089
- "dev": true
3090
- },
3091
- "spdx-expression-parse": {
3092
- "version": "1.0.4",
3093
- "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz",
3094
- "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=",
3095
- "dev": true
3096
- },
3097
- "spdx-license-ids": {
3098
- "version": "1.2.2",
3099
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz",
3100
- "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=",
3101
- "dev": true
3102
- },
3103
- "sprintf-js": {
3104
- "version": "1.0.3",
3105
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
3106
- "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
3107
- "dev": true
3108
- },
3109
- "squeak": {
3110
- "version": "1.3.0",
3111
- "resolved": "https://registry.npmjs.org/squeak/-/squeak-1.3.0.tgz",
3112
- "integrity": "sha1-MwRQN7ZDiLVnZ0uEMiplIQc5FsM=",
3113
- "dev": true,
3114
- "optional": true
3115
- },
3116
- "ssh2": {
3117
- "version": "0.4.15",
3118
- "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-0.4.15.tgz",
3119
- "integrity": "sha1-B8b0EG2fe26m5N9jbGxT8fmBf/g=",
3120
- "dev": true,
3121
- "dependencies": {
3122
- "isarray": {
3123
- "version": "0.0.1",
3124
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
3125
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
3126
- "dev": true
3127
- },
3128
- "readable-stream": {
3129
- "version": "1.0.34",
3130
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
3131
- "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
3132
- "dev": true
3133
- },
3134
- "string_decoder": {
3135
- "version": "0.10.31",
3136
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
3137
- "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
3138
- "dev": true
3139
- }
3140
- }
3141
- },
3142
- "ssh2-streams": {
3143
- "version": "0.0.23",
3144
- "resolved": "https://registry.npmjs.org/ssh2-streams/-/ssh2-streams-0.0.23.tgz",
3145
- "integrity": "sha1-ru8wgxu1/Er2qj9tCiYaQTUxYSs=",
3146
- "dev": true,
3147
- "dependencies": {
3148
- "isarray": {
3149
- "version": "0.0.1",
3150
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
3151
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
3152
- "dev": true
3153
- },
3154
- "readable-stream": {
3155
- "version": "1.0.34",
3156
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
3157
- "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
3158
- "dev": true
3159
- },
3160
- "string_decoder": {
3161
- "version": "0.10.31",
3162
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
3163
- "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
3164
- "dev": true
3165
- }
3166
- }
3167
- },
3168
- "sshpk": {
3169
- "version": "1.13.1",
3170
- "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz",
3171
- "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=",
3172
- "dev": true,
3173
- "optional": true
3174
- },
3175
- "stat-mode": {
3176
- "version": "0.2.2",
3177
- "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-0.2.2.tgz",
3178
- "integrity": "sha1-5sgLYjEj19gM8TLOU480YokHJQI=",
3179
- "dev": true
3180
- },
3181
- "statuses": {
3182
- "version": "1.3.1",
3183
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
3184
- "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=",
3185
- "dev": true
3186
- },
3187
- "stream-buffers": {
3188
- "version": "2.2.0",
3189
- "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz",
3190
- "integrity": "sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ=",
3191
- "dev": true
3192
- },
3193
- "stream-combiner2": {
3194
- "version": "1.1.1",
3195
- "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz",
3196
- "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=",
3197
- "dev": true
3198
- },
3199
- "stream-shift": {
3200
- "version": "1.0.0",
3201
- "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz",
3202
- "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=",
3203
- "dev": true
3204
- },
3205
- "streamsearch": {
3206
- "version": "0.1.2",
3207
- "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz",
3208
- "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=",
3209
- "dev": true
3210
- },
3211
- "string_decoder": {
3212
- "version": "1.0.3",
3213
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
3214
- "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
3215
- "dev": true
3216
- },
3217
- "string-width": {
3218
- "version": "1.0.2",
3219
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
3220
- "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M="
3221
- },
3222
- "stringstream": {
3223
- "version": "0.0.5",
3224
- "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",
3225
- "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=",
3226
- "dev": true,
3227
- "optional": true
3228
- },
3229
- "strip-ansi": {
3230
- "version": "3.0.1",
3231
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
3232
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
3233
- "dev": true
3234
- },
3235
- "strip-bom": {
3236
- "version": "2.0.0",
3237
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
3238
- "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
3239
- "dev": true
3240
- },
3241
- "strip-bom-stream": {
3242
- "version": "1.0.0",
3243
- "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz",
3244
- "integrity": "sha1-5xRDmFd9Uaa+0PoZlPoF9D/ZiO4=",
3245
- "dev": true
3246
- },
3247
- "strip-dirs": {
3248
- "version": "1.1.1",
3249
- "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-1.1.1.tgz",
3250
- "integrity": "sha1-lgu9EoeETzl1pFWKoQOoJV4kVqA=",
3251
- "dev": true
3252
- },
3253
- "strip-indent": {
3254
- "version": "1.0.1",
3255
- "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
3256
- "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
3257
- "dev": true
3258
- },
3259
- "strip-json-comments": {
3260
- "version": "2.0.1",
3261
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
3262
- "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
3263
- "dev": true
3264
- },
3265
- "strip-outer": {
3266
- "version": "1.0.0",
3267
- "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.0.tgz",
3268
- "integrity": "sha1-qsC6YNLpDF1PJ1/Yhp/ZotMQ/7g=",
3269
- "dev": true
3270
- },
3271
- "sum-up": {
3272
- "version": "1.0.3",
3273
- "resolved": "https://registry.npmjs.org/sum-up/-/sum-up-1.0.3.tgz",
3274
- "integrity": "sha1-HGYfZnBX9jvLeHWqFDi8FiUlFW4=",
3275
- "dev": true
3276
- },
3277
- "supports-color": {
3278
- "version": "2.0.0",
3279
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
3280
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
3281
- "dev": true
3282
- },
3283
- "svgo": {
3284
- "version": "0.6.6",
3285
- "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.6.6.tgz",
3286
- "integrity": "sha1-s0CIkDbyD5tEdUMHfQ9Vc+0ETAg=",
3287
- "dev": true,
3288
- "optional": true,
3289
- "dependencies": {
3290
- "js-yaml": {
3291
- "version": "3.6.1",
3292
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.6.1.tgz",
3293
- "integrity": "sha1-bl/mfYsgXOTSL60Ft3geja3MSzA=",
3294
- "dev": true,
3295
- "optional": true
3296
- }
3297
- }
3298
- },
3299
- "tar": {
3300
- "version": "2.2.1",
3301
- "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz",
3302
- "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE="
3303
- },
3304
- "tar-fs": {
3305
- "version": "1.16.0",
3306
- "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.0.tgz",
3307
- "integrity": "sha512-I9rb6v7mjWLtOfCau9eH5L7sLJyU2BnxtEZRQ5Mt+eRKmf1F0ohXmT/Jc3fr52kDvjJ/HV5MH3soQfPL5bQ0Yg=="
3308
- },
3309
- "tar-stream": {
3310
- "version": "1.5.4",
3311
- "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.4.tgz",
3312
- "integrity": "sha1-NlSc8E7RrumyowwBQyUiONr5QBY=",
3313
- "dev": true
3314
- },
3315
- "tempfile": {
3316
- "version": "1.1.1",
3317
- "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-1.1.1.tgz",
3318
- "integrity": "sha1-W8xOrsxKsscH2LwR2ZzMmiyyh/I=",
3319
- "dev": true,
3320
- "dependencies": {
3321
- "uuid": {
3322
- "version": "2.0.3",
3323
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz",
3324
- "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=",
3325
- "dev": true
3326
- }
3327
- }
3328
- },
3329
- "through2": {
3330
- "version": "0.6.5",
3331
- "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
3332
- "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
3333
- "dev": true,
3334
- "dependencies": {
3335
- "isarray": {
3336
- "version": "0.0.1",
3337
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
3338
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
3339
- "dev": true
3340
- },
3341
- "readable-stream": {
3342
- "version": "1.0.34",
3343
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
3344
- "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
3345
- "dev": true
3346
- },
3347
- "string_decoder": {
3348
- "version": "0.10.31",
3349
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
3350
- "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
3351
- "dev": true
3352
- }
3353
- }
3354
- },
3355
- "through2-filter": {
3356
- "version": "2.0.0",
3357
- "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-2.0.0.tgz",
3358
- "integrity": "sha1-YLxVoNrLdghdsfna6Zq0P4PWIuw=",
3359
- "dev": true,
3360
- "dependencies": {
3361
- "through2": {
3362
- "version": "2.0.3",
3363
- "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
3364
- "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
3365
- "dev": true
3366
- }
3367
- }
3368
- },
3369
- "time-stamp": {
3370
- "version": "1.1.0",
3371
- "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz",
3372
- "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=",
3373
- "dev": true
3374
- },
3375
- "timed-out": {
3376
- "version": "3.1.3",
3377
- "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-3.1.3.tgz",
3378
- "integrity": "sha1-lYYL/MXHbCd/j4Mm/Q9bLiDrohc=",
3379
- "dev": true
3380
- },
3381
- "tiny-lr": {
3382
- "version": "0.2.1",
3383
- "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-0.2.1.tgz",
3384
- "integrity": "sha1-s/26gC5dVqM8L28QeUsy5Hescp0=",
3385
- "dev": true,
3386
- "dependencies": {
3387
- "qs": {
3388
- "version": "5.1.0",
3389
- "resolved": "https://registry.npmjs.org/qs/-/qs-5.1.0.tgz",
3390
- "integrity": "sha1-TZMuXH6kEcynajEtOaYGIA/VDNk=",
3391
- "dev": true
3392
- }
3393
- }
3394
- },
3395
- "tmp": {
3396
- "version": "0.0.28",
3397
- "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.28.tgz",
3398
- "integrity": "sha1-Fyc1t/YU6nrzlmT6hM8N5OUV0SA=",
3399
- "dev": true
3400
- },
3401
- "to-absolute-glob": {
3402
- "version": "0.1.1",
3403
- "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz",
3404
- "integrity": "sha1-HN+kcqnvUMI57maZm2YsoOs5k38=",
3405
- "dev": true
3406
- },
3407
- "tough-cookie": {
3408
- "version": "2.3.3",
3409
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz",
3410
- "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=",
3411
- "dev": true,
3412
- "optional": true
3413
- },
3414
- "trim-newlines": {
3415
- "version": "1.0.0",
3416
- "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
3417
- "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
3418
- "dev": true
3419
- },
3420
- "trim-repeated": {
3421
- "version": "1.0.0",
3422
- "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz",
3423
- "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=",
3424
- "dev": true
3425
- },
3426
- "tunnel-agent": {
3427
- "version": "0.6.0",
3428
- "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
3429
- "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
3430
- "dev": true,
3431
- "optional": true
3432
- },
3433
- "tweetnacl": {
3434
- "version": "0.14.5",
3435
- "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
3436
- "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
3437
- "dev": true,
3438
- "optional": true
3439
- },
3440
- "type-is": {
3441
- "version": "1.6.15",
3442
- "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz",
3443
- "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=",
3444
- "dev": true
3445
- },
3446
- "typedarray": {
3447
- "version": "0.0.6",
3448
- "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
3449
- "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
3450
- "dev": true
3451
- },
3452
- "uglify-js": {
3453
- "version": "2.8.29",
3454
- "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
3455
- "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
3456
- "dev": true
3457
- },
3458
- "uglify-to-browserify": {
3459
- "version": "1.0.2",
3460
- "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
3461
- "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
3462
- "dev": true,
3463
- "optional": true
3464
- },
3465
- "underscore": {
3466
- "version": "1.7.0",
3467
- "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz",
3468
- "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=",
3469
- "dev": true
3470
- },
3471
- "underscore.string": {
3472
- "version": "3.2.3",
3473
- "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.2.3.tgz",
3474
- "integrity": "sha1-gGmSYzZl1eX8tNsfs6hi62jp5to=",
3475
- "dev": true
3476
- },
3477
- "unique-stream": {
3478
- "version": "2.2.1",
3479
- "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.2.1.tgz",
3480
- "integrity": "sha1-WqADz76Uxf+GbE59ZouxxNuts2k=",
3481
- "dev": true
3482
- },
3483
- "unpipe": {
3484
- "version": "1.0.0",
3485
- "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
3486
- "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
3487
- "dev": true
3488
- },
3489
- "unzip-response": {
3490
- "version": "1.0.2",
3491
- "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz",
3492
- "integrity": "sha1-uYTwh3/AqJwsdzzB73tbIytbBv4=",
3493
- "dev": true
3494
- },
3495
- "uri-path": {
3496
- "version": "1.0.0",
3497
- "resolved": "https://registry.npmjs.org/uri-path/-/uri-path-1.0.0.tgz",
3498
- "integrity": "sha1-l0fwGDWJM8Md4PzP2C0TjmcmLjI=",
3499
- "dev": true
3500
- },
3501
- "url-parse-lax": {
3502
- "version": "1.0.0",
3503
- "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz",
3504
- "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=",
3505
- "dev": true
3506
- },
3507
- "url-regex": {
3508
- "version": "3.2.0",
3509
- "resolved": "https://registry.npmjs.org/url-regex/-/url-regex-3.2.0.tgz",
3510
- "integrity": "sha1-260eDJ4p4QXdCx8J9oYvf9tIJyQ=",
3511
- "dev": true,
3512
- "optional": true
3513
- },
3514
- "util-deprecate": {
3515
- "version": "1.0.2",
3516
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
3517
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
3518
- "dev": true
3519
- },
3520
- "uuid": {
3521
- "version": "3.1.0",
3522
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz",
3523
- "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==",
3524
- "dev": true,
3525
- "optional": true
3526
- },
3527
- "vali-date": {
3528
- "version": "1.0.0",
3529
- "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz",
3530
- "integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=",
3531
- "dev": true
3532
- },
3533
- "validate-npm-package-license": {
3534
- "version": "3.0.1",
3535
- "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz",
3536
- "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=",
3537
- "dev": true
3538
- },
3539
- "verror": {
3540
- "version": "1.10.0",
3541
- "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
3542
- "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
3543
- "dev": true,
3544
- "optional": true
3545
- },
3546
- "vinyl": {
3547
- "version": "1.2.0",
3548
- "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz",
3549
- "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=",
3550
- "dev": true
3551
- },
3552
- "vinyl-assign": {
3553
- "version": "1.2.1",
3554
- "resolved": "https://registry.npmjs.org/vinyl-assign/-/vinyl-assign-1.2.1.tgz",
3555
- "integrity": "sha1-TRmIkbVRWRHXcajNnFSApGoHSkU=",
3556
- "dev": true
3557
- },
3558
- "vinyl-fs": {
3559
- "version": "2.4.4",
3560
- "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-2.4.4.tgz",
3561
- "integrity": "sha1-vm/zJwy1Xf19MGNkDegfJddTIjk=",
3562
- "dev": true,
3563
- "dependencies": {
3564
- "through2": {
3565
- "version": "2.0.3",
3566
- "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
3567
- "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
3568
- "dev": true
3569
- }
3570
- }
3571
- },
3572
- "walkdir": {
3573
- "version": "0.0.11",
3574
- "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.0.11.tgz",
3575
- "integrity": "sha1-oW0CXrkxvQO1LzCMrtD0D86+lTI=",
3576
- "dev": true
3577
- },
3578
- "ware": {
3579
- "version": "1.3.0",
3580
- "resolved": "https://registry.npmjs.org/ware/-/ware-1.3.0.tgz",
3581
- "integrity": "sha1-0bFPOdLiy0q4xAmPdW/ksWTkc9Q=",
3582
- "dev": true
3583
- },
3584
- "websocket-driver": {
3585
- "version": "0.7.0",
3586
- "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz",
3587
- "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=",
3588
- "dev": true
3589
- },
3590
- "websocket-extensions": {
3591
- "version": "0.1.2",
3592
- "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.2.tgz",
3593
- "integrity": "sha1-Dhh4HeYpoYMIzhSBZQ9n/6JpOl0=",
3594
- "dev": true
3595
- },
3596
- "whet.extend": {
3597
- "version": "0.9.9",
3598
- "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz",
3599
- "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=",
3600
- "dev": true,
3601
- "optional": true
3602
- },
3603
- "which": {
3604
- "version": "1.2.14",
3605
- "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz",
3606
- "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=",
3607
- "dev": true
3608
- },
3609
- "wide-align": {
3610
- "version": "1.1.2",
3611
- "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz",
3612
- "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w=="
3613
- },
3614
- "window-size": {
3615
- "version": "0.1.0",
3616
- "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
3617
- "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=",
3618
- "dev": true
3619
- },
3620
- "wordwrap": {
3621
- "version": "0.0.2",
3622
- "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
3623
- "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=",
3624
- "dev": true
3625
- },
3626
- "wrap-fn": {
3627
- "version": "0.1.5",
3628
- "resolved": "https://registry.npmjs.org/wrap-fn/-/wrap-fn-0.1.5.tgz",
3629
- "integrity": "sha1-8htuQQFv9KfjFyDbxjoJAWvfmEU=",
3630
- "dev": true,
3631
- "dependencies": {
3632
- "co": {
3633
- "version": "3.1.0",
3634
- "resolved": "https://registry.npmjs.org/co/-/co-3.1.0.tgz",
3635
- "integrity": "sha1-TqVOpaCJOBUxheFSEMaNkJK8G3g=",
3636
- "dev": true
3637
- }
3638
- }
3639
- },
3640
- "wrappy": {
3641
- "version": "1.0.2",
3642
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
3643
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
3644
- "dev": true
3645
- },
3646
- "xtend": {
3647
- "version": "4.0.1",
3648
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
3649
- "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
3650
- "dev": true
3651
- },
3652
- "yargs": {
3653
- "version": "3.10.0",
3654
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
3655
- "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
3656
- "dev": true,
3657
- "dependencies": {
3658
- "camelcase": {
3659
- "version": "1.2.1",
3660
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
3661
- "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
3662
- "dev": true
3663
- }
3664
- }
3665
- },
3666
- "yauzl": {
3667
- "version": "2.8.0",
3668
- "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.8.0.tgz",
3669
- "integrity": "sha1-eUUK/yKyqcWkHvVOAtuQfM+/nuI=",
3670
- "dev": true
3671
- },
3672
- "zip-stream": {
3673
- "version": "1.2.0",
3674
- "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-1.2.0.tgz",
3675
- "integrity": "sha1-qLxF9MG0lpnGuQGYuqyqzbzUugQ=",
3676
- "dev": true,
3677
- "dependencies": {
3678
- "lodash": {
3679
- "version": "4.17.4",
3680
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
3681
- "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
3682
- "dev": true
3683
- }
3684
- }
3685
- }
3686
- }
3687
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
readme.txt CHANGED
@@ -1,525 +1,612 @@
1
- === Dokan Multivendor Marketplace ===
2
- Contributors: tareq1988, wedevs, rafsuntaskin, sabbir1991, nazmulhassann20, roshni07
3
- Donate Link: http://tareq.co/donate/
4
- Tags: woocommerce, multivendor, multi-vendor, paypal, shop, vendor, seller, store, sell, online, amazon, dokan, ebay, Etsy, multi seller, multi store, multi vendor, multi vendors, multistore, multivendor, product vendor, product vendors, vendor, vendor system, vendors, wc market place, wc marketplace, wc vendors, woo vendors, woocommerce market place, woocommerce marketplace, woocommerce multi vendor, commission rate, e-commerce, ebay, ecommerce, yith, yithemes
5
- Requires at least: 4.4
6
- Tested up to: 4.8.1
7
- WC requires at least: 2.6
8
- WC tested up to: 3.1.2
9
- Requires PHP: 5.6
10
- Stable tag: trunk
11
- License: GPLv2 or later
12
- License URI: http://www.gnu.org/licenses/gpl-2.0.html
13
-
14
- The pioneer multi-vendor plugin for WordPress. Start your own marketplace in minutes!
15
-
16
- == Description ==
17
-
18
- = Dokan Multivendor Marketplace Plugin For WordPress =
19
-
20
- Dokan is the best front end multi vendor marketplace on WordPress, powered by WooCommerce. Build your own Amazon, Shopify, eBay, Magento like marketplace in just 30 minutes. Dokan is the fastest way to start ecommerce and earn through commissions with products ranging from digital, physical to variable.
21
-
22
- **The best Frontend user interface**
23
-
24
- We love the philosophy of a complete frontend experience. So, vendors have their personalised dashboard on the store frontend where they can find all what they need. Backend access is restricted to the admin only. This sets Dokan apart on a higher ground. All of our add-ons are frontend compatible. Dokan(Pro) comes with a free responsive ecommerce theme that has widgets specially made for Dokan.
25
-
26
- **It’s fast and easy to use**
27
-
28
- Your business operations with Dokan is smooth and fast. Everything will work as you expected because we have designed the experience following the best intuitive practices from popular ecommerce activators like WooCommerce, Bigcommerce etc.
29
-
30
- **Reliable yet a growing platform**
31
-
32
- We regularly keep our version updated for flawless operation and integration with dependable services. We just not only keep things compatible, we have a style of adding the most trendy new features to Dokan with every update.
33
-
34
- **A really scalable market**
35
-
36
- You can have unlimited vendors and vendors can create unlimited products. Currently 5 product types are supported eg. physical product, downloadable product, variable product, bookable products through the [Dokan WC Bookings](https://wedevs.com/products/plugins/dokan/woocommerce-booking-integration/) add on and auction products through the [Dokan Simple Auction](https://wedevs.com/products/plugins/dokan/dokan-simple-auctions/) add on.
37
-
38
- **Earn in many ways**
39
-
40
- Profit doesn’t only rely on sales. Multiple ways allow earning through vendor commissions or product based commissions. You can also create subscription packs that allow you to charge for product uploads, product limits and time.
41
-
42
- **Puts you in control**
43
-
44
- As a an admin, you can use Dokan in a way where you can control everything that happens in your marketplace. Product publishing, vendor registration, subscription renewal and every other vendor activity can be re routed through you.
45
-
46
- > Get the [**Pro Version**](https://wedevs.com/dokan/?utm_source=wporg&utm_medium=cta&utm_campaign=dokan-lite) with bunch of super features, updates and scope for powerful add-ons.
47
-
48
- = Features =
49
- **Marketplace with Independent Stores**
50
-
51
- * Every seller gets their own store with a unique URL and branding.
52
- * Beautiful storefront styles with contact details and widgets
53
- * Store location map on store front. (Pro feature)
54
-
55
- **Frontend Dashboard For Each Seller**
56
-
57
- * WordPress admin area can be accessed only by admin.
58
- * Vendors manage products, orders, withdraws everything from site frontend.
59
-
60
- **Earn From Each Sale**
61
-
62
- * A part of the sale value is sent to admin as commission.
63
- * Commission rate can be customized.
64
- * Per vendor percentage override. (**Pro feature**)
65
-
66
- **Product Management**
67
-
68
- * Create and manage your products from the frontend.
69
- * Create variable or downloadable products. (**Pro Feature**)
70
- * Vendors have option to manage product shipping, attributes. (**Pro Feature**)
71
- * Vendors can manage downloadable product permission, expiry date and download limit. (**Pro Feature**)
72
-
73
- **Reports (Pro Feature)**
74
-
75
- * Vendors can see their sales report, generate statements and overview from frontend.
76
- * Admins can overview orders and filter by sale, by date, top vendors or top earners.
77
- * Export order reports to CSV.
78
-
79
- **Coupon Management (Pro Feature)**
80
-
81
- * Manage and offer discounts for each product.
82
- * Set expiry and restriction for coupons.
83
-
84
- **Manage Product Reviews (Pro Feature)**
85
-
86
- * All product reviews are managed by vendors (with admin override)
87
- * View all reviews on products left by customers.
88
-
89
- **Pro Features Continued**
90
-
91
- *The admin panel gives you some powerful management tools*
92
-
93
- * Admin can view and manage vendor list
94
- * Admin can view his as well as every vendor’s earning reports individually
95
- * Dokan Pro has update and support option for customer.
96
- * Dokan tools option has page installer and Sync table option
97
- * Advanced settings for the admin -
98
- * General Settings
99
- * Admin can enable/disable the map on the store page.
100
- * Admin can enable/disable the contact form on the store page
101
- * Admin can also enable/disable the store sidebar from theme.
102
-
103
- * Selling Options
104
- * Admin can manage new product status.
105
- * Admin can set the order status for withdraw.
106
- * Admin can seth threshold withdraw day for the vendor.
107
- * Admin can change the vendor store URL.
108
- * Admin can also enable/disable the permission of review editing for the vendor.
109
-
110
- * Widgets
111
- * Best vendor widget
112
- * Featured vendor widget
113
- * Store contact widget
114
- * Store location widget
115
-
116
- And much more. Checkout the [**Pro Version**](https://wedevs.com/dokan/?utm_source=wporg&utm_medium=cta&utm_campaign=dokan-lite)
117
-
118
- = Contribute =
119
- This may have bugs and lack of many features. If you want to contribute on this project, you are more than welcome. Please fork the repository from [Github](https://github.com/weDevsOfficial/dokan).
120
-
121
- = Author =
122
- Brought to you by [Tareq Hasan](http://tareq.co) from [weDevs](http://wedevs.com)
123
-
124
- == Installation ==
125
-
126
- Extract the zip file and just drop the contents in the wp-content/plugins/ directory of your WordPress installation and then activate the Plugin from Plugins page.
127
-
128
- == Frequently Asked Questions ==
129
-
130
- = Q. Can I add a payment method? =
131
- A. Just use any standard WooCommerce payment gateway.
132
-
133
- = Q. How do withdrawals work? =
134
- A. Right now, we offer PayPal, Bank and Skrill (pro) withdraw method for "Dokan". For PayPal withdraw, you can generate Mass Payment File to payout your sellers at once. Other methods are manual though.
135
-
136
- = Q. Does Dokan integrate with BuddyPress? =
137
- A. Not for the moment. We have plans to integrate with BuddyPress via an add-on in the near future.
138
-
139
- = Q. Is Dokan responsive? =
140
- A. Yes, Dokan is fully responsive. We take mobile first approach and it displays very well in mobile and tablet devices. We are using Twitter Bootstrap as a framework and it just works.
141
-
142
- = Q. Does it supports variable products? =
143
- A. The **Pro** version does! You can seller normal products, downloadable products and variable products with your own attributes.
144
-
145
- = Q. Can each vendor customize his store? =
146
- A. Right now we have options for only changing the store banner page. We are working on a better customizable seller store page.
147
-
148
- = Q. Does Dokan supports PayPal adaptive payments? =
149
- A. Yes it does! We have [an add-on](http://wedevs.com/plugin/dokan/paypal-adaptive-payments/) that brings PayPal adaptive payment support.
150
-
151
- = Q. Will it be possible to take a cut or commission from the sales? =
152
- A. Yes, that's how Dokan works. In every sales, you can cut a commission from a order. That's configurable from Dokan settings.
153
-
154
- = Q. Can Dokan be used in a single seller mode? =
155
- A. Obviously, you can use this on a single seller site to give them a nice front-end experience.
156
-
157
- = Q. How to upgrade to the Pro version?
158
- A. Just install and activate the PRO version without deleting the free plugin. All your data will be safe on the database and some extra features will be added. If you feel something may go wrong, please consult with our [support](https://wedevs.com/contact/) staff first.
159
-
160
- == Screenshots ==
161
-
162
- 1. Admin Dashboard
163
- 2. Withdraw requests from sellers
164
- 3. Settings &rarr; General
165
- 4. Settings &rarr; Selling Options
166
- 5. Settings &rarr; Withdraw Options
167
- 6. Settings &rarr; Page Settings
168
- 7. Settings &rarr; Appearance
169
- 8. Seller Dashboard in site frontend
170
- 9. Frontend &rarr; Products Listing
171
- 10. Frontend &rarr; Create a new Product
172
- 11. Frontend &rarr; Edit a product
173
- 12. Frontend &rarr; Orders Listing
174
- 13. Frontend &rarr; Orders &rarr; Details
175
- 14. Frontend &rarr; Submit withdraw request
176
- 15. Frontend &rarr; Store Settings
177
- 16. Frontend &rarr; Store Payment Settings
178
- 17. Frontend &rarr; Individual Seller Store-1
179
- 18. Frontend &rarr; Individual Seller Store-2
180
- 19. Frontend &rarr; Individual Seller Store-3
181
-
182
- == Changelog ==
183
-
184
- v2.6.10 -> Nov 13, 2017
185
- ---------------------
186
- - [new] Added dokan CRUD classes
187
- - [new] Added help menu on Dokan Admin Dashboard
188
- - [tweak] Dokan Admin settings page redesigned
189
- - [tweak] Price suggestion made compatible with Flat commission
190
- - [tweak] Admin setup wizard styles updated
191
- - [fix] Fixed casting issue in updater class
192
- - [fix] Product status update on vendor status toggle
193
- - [fix] Commission calculation issue fixed
194
- - [fix] Store banner width and height not working properly
195
- - [fix] Order filtering is showing wrong pagination
196
-
197
- v2.6.9 -> Oct 17, 2017
198
- ---------------------
199
- - [new] Depends on vendor commission, pricing suggession is added in new and edit product template
200
- - [new] Added admin settings for showing/hiding customer info in order details page
201
- - [new] Both flat and percentage commission system added for vendor
202
- - [new] Added functinality for deleting vendor details when the vendor account is deleted
203
- - [new] Added documentaion links in dokan settings and pages
204
- - [fix] Clearing and restoring all caching issue
205
- - [fix] Disabled order editing option when the order status is cancelled or refunded
206
- - [fix] Product image uploading permission issue fixed
207
- - [fix] Store layout breaks when the address is too long fixed
208
- - [fix] Non numerical error fixed for php latest versions
209
- - [fix] Fix vendor order inserting undefined notices
210
-
211
- v2.6.8 -> Sep 7, 2017
212
- ---------------------
213
- - [new] Dokan Emails now configurable from WooCommerce Email settings with theme override support
214
- - [new] Canceled withdraw requests are now shown for vendor
215
- - [fix] Date time format fixed for order and product listing to support global format
216
- - [fix] saving variable product prices
217
- - [tweak] fontawesome library updated
218
-
219
- v2.6.7 -> Aug 3, 2017
220
- ---------------------
221
- - [fix] Fix multiple vendor order creating issue
222
- - [fix] Disable pre defined attribute which already set with product
223
-
224
- v2.6.6 -> July 31, 2017
225
- ---------------------
226
- - [fix] Dokan Emails are not translating
227
- - [fix] 'No result found' text on product edit page not translating
228
- - [fix] Order sync offset problem during checkout
229
- - [fix] All graph rtl problem
230
- - [tweak] Vendor dashboard graph RTL enhanced
231
- - [tweak] Filter added to customize shop address
232
- - [tweak] Several other code enhancement and optimization
233
-
234
- v2.6.5 -> July 16, 2017
235
- ---------------------
236
- - [new] Added IBAN and Routing number fields for vendor's Bank info section
237
- - [new] Added settings in admin panel to disable Vendor Welcome Wizard
238
- - [new] Added filter `dokan_seller_registration_required_fields`
239
- - [new] Store Category widget design updated
240
- - [new] Added Dokan logo as menu icon in admin dashboard
241
- - [new] Dokan Store Sidebar widget area now available for all themes
242
- - [fix] Store categories are not updating properly
243
- - [fix] Showing store location widget if location is not set
244
- - [fix] Withdraw not working for IP address with port number
245
- - [tweak] Enahanced RTL support
246
- - [tweak] Profile Completion progress filter args updated
247
-
248
- v2.6.4 -> June 22, 2017
249
- ---------------------
250
- - [fix] Store page product loop pagination not showing
251
- - [fix] Order exporting not working properly
252
- - [fix] Earning calculation date range issue
253
- - [tweak] Banner upload is now available in store settings for all appearances
254
- - [tweak] Profile completion progress custom values logic updated
255
- - [tweak] Downloadable product section performance tweaks
256
-
257
- v2.6.3 -> June 08, 2017
258
- ---------------------
259
- - [fix] Missing text domains updated
260
- - [fix] Featured Seller, Best Seller and Top Seller query fixed for older version of WooCommerce
261
- - [fix] Translation issue fixed on withdraw template
262
- - [fix] Store pages template conflitcs with theme home page
263
- - [tweak] Various other code improvements
264
-
265
- v2.6.2 -> May 18, 2017
266
- ---------------------
267
- - [new] Dynamic state select option for Vendor Setup Wizard
268
- - [fix] Change Product Seller from admin not working properly for variation products
269
- - [fix] Store listing search not showing same result if submitted
270
- - [fix] Store listing search sending multiple requests on AJAX
271
- - [fix] Feature products, Best selling products and Top rated seller queries fixed
272
- - [fix] Fixed Order status label issue in seller order listing
273
- - [tweak] Added currency argument for wc_price
274
- - [tweak] Various helper text labels updated
275
-
276
- v2.6.1 -> May 04, 2017
277
- ---------------------
278
- - [new] Filter added `dokan_get_seller_earnings`
279
- - [fix] `dokan-dashboard` shortcode not rendering properly
280
- - [fix] Clear cache on vendor balance update
281
- - [fix] Order regenerate order status issue
282
- - [fix] Vendor wizard showing blank page
283
- - [fix] Downloadable product grant access issue in vendor order
284
- - [fix] Rating display on widget not working properly
285
- - [fix] Single product view sales schedule issue fixed
286
- - [fix] Vendor Product visibility and catalog issue fixed
287
- - [fix] Date range issue fixed for vendor balance
288
- - [tweak] Refill submitted values on error while adding new product
289
- - [tweak] Updated posted value handler function
290
- - [tweak] Hide view action on product listing if status is pending
291
-
292
- v2.6.0 -> April 18, 2017
293
- ---------------------
294
- - [new] Made dokan compatible with WC 3.0
295
- - [new] Store listing design updated with city added
296
- - [tweak] Store listing banner image streched for full view
297
- - [fix] Variations attribute issue fixed
298
- - [fix] Sub-order not created for multiple seller is fixed
299
- - [fix] Seller dashboard product and order listing showing notices fixed
300
- - [fix] Seller new product add page showing notices fixed
301
- - [fix] Saving digital product data with WC 3.0
302
- - [fix] Saving variation product data with WC 3.0
303
- - [fix] Registration form now working with WC 3.0
304
-
305
- v2.5.7 -> March 30, 2017
306
- ----------------------
307
- - [new] New design for store listing page
308
- - [new] Added gallery image uploader in add new product popup and page
309
- - [new] Added `dokan_get_seller_amount_from_order` filter
310
- - [fix] Shipping tracking modal issue for third-party theme conflicting
311
- - [fix] Dokan updater issue fixed
312
- - [fix] Fix store listing search
313
- - [fix] "More tab" checkbox saving issue on store settings
314
- - [fix] Some translation issue fixed in product page
315
- - [tweak] Remove modal js library
316
- - [tweak] Remove default placeholder content from product description in new product page
317
- - [tweak] Change required field state to country in store settings
318
-
319
- v2.5.6 -> March 16, 2017
320
- ----------------------
321
- - [fix] If no withdraw limit is set then it defaults to ‘0’
322
- - [fix] Remove add to cart fragment filter for thirdparty theme conflicting
323
- - [new] Added `dokan_seller_total_sales`, `dokan_get_formatted_seller_balance` and `dokan_get_seller_balance` filter
324
-
325
- v2.5.5 -> March 13, 2017
326
- ---------------------
327
- - [tweak] Enabled showing cancelled orders in case of multiple sub-orders
328
- - [fix] Fixed js error on my-account page
329
- - [fix] Fixed reports showing wrong curve
330
- - [fix] Text domain issue fixed
331
-
332
- v2.5.4 -> March 8, 2017
333
- ----------------------
334
- - [tweak] Changed text domain from 'dokan' to 'dokan-lite'
335
- - [new] Added settings to turn on/off new product form pop-up
336
- - [new] Added schedule discount price fields in new product form template when popup settings is disabled
337
- - [fix] Dokan Tabs css fixed for better compatibility with all themes
338
- - [fix] Fixed issues with saving product types other than simple like booking/auction
339
- - [fix] Fixed issues with withdraw balance and status
340
- - [fix] Template rendering issue on Store page and Review page for vendors is fixed.
341
-
342
- v2.5.3 -> February 14, 2017
343
- ----------------------
344
- - [fix] Order Tracking modal not working properly in some themes
345
- - [fix] Fixed showing notice on customer order table for multiple vendors
346
- - [fix] Fixed product listing status count issue
347
- - [fix] Fixed withdraw status messages and calculation
348
- - [tweak] Removed un-necessary codes and optimized code structure
349
-
350
- v2.5.2 -> January 25, 2017
351
- ----------------------
352
- - [new] Added filter 'dokan_new_product_popup_args' to enable custom validation on new product add
353
- - [new] Enabled vendors to select all products while creating coupon
354
- - [fix] On plugin activation auto flush rewrite rules
355
- - [fix] Seller Setup wizard not translating properly in some cases
356
- - [fix] Shipping tracking modal not showing while bootstrap loaded is fixed
357
- - [fix] Vendor statement enhanced for calculating per product commission
358
- - [tweak] Seller setup wizard enhanced for responsiveness
359
- - [tweak] Seller dashboard widgets enhanced for better responsiveness
360
- - [tweak] Add new product pop up enhanced for better responsiveness
361
- - [tweak] Several other optimizations to codebase for better and stable performance
362
-
363
- v2.5.1 -> January 12, 2017
364
- ---------------------
365
- - [new] Front-End product template new UI
366
- - [tweak] All SELLER text is changed to VENDOR
367
- - [tweak] Updated Seller Earning Statement Report View
368
- - [tweak] Fixed variable product data saving issues
369
- - [tweak] Changed Order Tracking options from Select to Text box for sellers
370
- - [tweak] Improved Responsiveness on seller dashboard pages
371
- - [tweak] Product commission option is moved to advance tab from general
372
- - [fix] Improved Seller Setup wizard for better UX
373
- - [fix] Improved Seller Setup wizard for better UX
374
- - [fix] Fixed showing error If Google MAP API is not given
375
- - [fix] Fixed Extra fee receiver not working issue
376
-
377
- = v2.5 -> October 18, 2016 =
378
- ---------------------
379
- - [new] Setup Wizard on Admin panel
380
- - [new] Setup Wizard for seller settings after new seller registration
381
- - [new] Multiple header templates for store template
382
- - [new] Added DOKAN shortcode insert button on post/page editor
383
- - [new] Added store search option on store listing page
384
- - [new] Added detailed income and withdraw statement for sellers
385
- - [new] Added option to choose tax and shipping receiver as admin or seller.
386
- - [new] Show seller payment options on user profile in back-end.
387
- - [tweak] Dokan store listing shortcode has more options
388
- - [tweak] Flat rate shipping synced with zone ID
389
- - [tweak] Fixed Tab view variation products
390
- - [tweak] Added active states in product review status filter
391
- - [fix] Fixed front-end variation issue for other languages
392
- - [fix] Fixed product add while selling is disabled for sellers
393
-
394
- = v2.4.12 -> August 08, 2016 =
395
- ---------------------
396
- - [new] Product base admin commission
397
- - [new] Sellers coupon show on store
398
- - [tweak] Added Settings for gMap API key
399
- - [fix] Product with same sku
400
- - [fix] Product permalink, defaults to 'product'
401
- - [fix] Image upload attribute undefined issue
402
- - [fix] Multiple seller order mail
403
- - [fix] Product sku search
404
- - [fix] Store search by store name
405
-
406
-
407
- = v2.4.11 -> May 29, 2016 =
408
- ---------------------
409
- - [new] Refund request from seller to admin by sellers order details page
410
- - [new] Tracker added
411
- - [fix] Checkout issue if flat rate shipping set as null
412
- - [fix] Change seller display name to store name
413
- - [fix] Multiple submit request on product add/edit
414
- - [fix] Undefine error on cart page for shipping additional price
415
- - [fix] Product edit page permission
416
- - [fix] Remove duplicate insert on dokan order table
417
-
418
- = v2.4.10 -> February 24, 2016 =
419
- ---------------------
420
- - [new] New dashboard menu added for 'store link', 'edit account' and 'sign out'
421
- - [fix] Remove repeated data rendering on admin panel dokan earning section
422
- - [fix] Terms and condition not showing on registration issue
423
- - [fix] Dashboard/orders page single view responsive issue
424
- - [fix] Product edit and add issue on Firefox and IE browser
425
- - [fix] Product variation save and update issues
426
-
427
- = v2.4.9 -> February 01, 2016 =
428
- ---------------------
429
- - [new] Plugin help page added
430
- - [new] Seller search added on store listing
431
- - [tweak] Some validation on contact seller email handler and after sent hook updated
432
- - [tweak] Category check added on new product add without reloading page
433
- - [tweak] Auto suggestion and clear button on flat view variation product attributes input field
434
- - [fix] Downloadable file change in product after order issue fixed
435
- - [fix] Order status translation issue on order listing page
436
- - [fix] Email not send to seller on new order issue fixed
437
- - [fix] Allow float number for seller percentage
438
- - [fix] SEO hook updated for YOAST to make compatible with WP 4.4
439
- - [fix] Browser jump issue in tab view on click of tabs
440
-
441
- = v2.4.8 -> November 21, 2015 =
442
- ---------------------
443
- - [tweak] Email template override system added
444
- - [fix] Change dokan SEO admin option section
445
- - [fix] Ajax url fixed to prevent conflict
446
- - [fix] Fix Arrow (reverted) for pagination
447
- - [fix] Hide unapproved comment from store review tab
448
- - [fix] Update cart discount meta on suborder create
449
-
450
- = v2.4.7 -> October 20, 2015 =
451
- ---------------------
452
- - [fix] Fix Coupon discount redundancy
453
- - [fix] Fix product gallery image delete issue on tab view
454
- - [fix] Fix translation issue on user migration form
455
- - [fix] Fix Store listing template view for not logged-in user
456
- - [fix] parent sub-order creation on unsuccessful payment by card
457
- - [fix] Store page breadcrumb fixed to show Store name and listing link properly
458
-
459
-
460
- = v2.4.6 -> October 12, 2015 =
461
-
462
- - [tweak] Added terms and condition option field on Registration form
463
- - [fix] Remove required for product per page field on store settings
464
- - [fix] Fix delete variation product issue on tab view for seller
465
- - [fix] Fix redundant data for guest users
466
- - [fix] Fix responsive issue on front page product listing
467
- - [fix] Seller store banner size to cover
468
- - [fix] Store template fix for Twenty Twelve theme
469
-
470
-
471
- = v2.4.5 -> September 14, 2015 =
472
-
473
- * [fix] Fix responsive style issue for store page
474
- * [fix] Fix undefined parent order object issue on creat sub-order
475
- * [fix] Fix seller dashboard product comments count on widget
476
-
477
- = v2.4.4 -> September 4, 2015 =
478
-
479
- * [new] Seller balance re-sync by checking unexpected order button added on tools page
480
- * [fix] Make some text translatable on contact seller widget
481
- * [fix] Optimize sql query to make regenerate process fast
482
- * [fix] Fix WooCommerce deactivate dependency issue
483
- * [fix] Fix plugin bulk activate issue with dokan welcome page
484
-
485
- = v2.4.3 -> August 25, 2015 =
486
-
487
- * [new] Welcome page on activation with re-sync button added
488
- * [tweak] Visual Progress bar added for re-sync Order progress
489
- * [fix] Sub-order duplicate issue fixed
490
- * [fix] Fix WP editor compatible to 4.3
491
- * [fix] Compatible with WordPress 4.3 widget __construct functions
492
- * [fix] Fix table name in sync table sql
493
- * [fix] Fix store review rewrite problem, Move store functionality in Dokan_Pro_Store class
494
- * [fix] Fix seller migration template loader
495
- * [fix] Fix same seller multiple product type shipping issue
496
- * [fix] Fix flat rate shipping issue for multi seller
497
-
498
- = v2.4.2 -> August 12, 2015 =
499
-
500
- * [tweak] New hook on store header: dokan_store_before_social
501
- * [tweak] Re-arrange dokan admin settings fields
502
- * [tweak] Add field on seller store settings to manage store product per page
503
- * [tweak] Sellers redirected to dashboard after login
504
- * [fix] Feature seller widget display template path
505
- * [fix] Best seller widget display seller name changed to store name
506
- * [fix] Fix problem with showing variation data on order details
507
- * [fix] Update "dokan_create_seller_order" function to save variation order meta on sub-order
508
- * [fix] Update "dokan_post_input_box" function to add option for making text field and number field required
509
- * [fix] Fix balance separator problem on withdraw
510
- * [fix] Fix total sales balance display on seller dashboard page
511
- * [fix] Keep value saved of override shipping fields meta even when the option unchecked
512
- * [fix] English language phrases correction on several place
513
- * [fix] Fix calculation of sub-orders in WooCommerce dashboard status widget sales query
514
-
515
- = 2.4.1 (August 1, 2015) =
516
- * [new] Pro version rewrite to Free
517
-
518
- = 1.0 =
519
- Initial version released
520
-
521
-
522
- == Upgrade Notice ==
523
-
524
- = 2.6.0 =
525
- **Important Update** This update is compatible with WooCommerce 3.0. Make sure to backup and read full [changelog](https://docs.wedevs.com/docs/dokan/changelog/) for more details.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ === Dokan Multivendor Marketplace ===
2
+ Contributors: tareq1988, wedevs, sabbir1991, rafsuntaskin
3
+ Donate Link: http://tareq.co/donate/
4
+ Tags: woocommerce, multivendor, multi-vendor, vendor, multishop, paypal , seller, store, sell, online, amazon, dokan, ebay, Etsy, multi seller, multi store, multi vendor, multi vendors, multistore, multivendor, product vendor, product vendors, vendor, vendor system, vendors, wc market place, wc marketplace, wc vendors, woo vendors, woocommerce market place, woocommerce marketplace, woocommerce multi vendor, commission rate, e-commerce, ebay, ecommerce, yith, yithemes
5
+ Requires at least: 4.4
6
+ Tested up to: 4.9.4
7
+ WC requires at least: 2.6
8
+ WC tested up to: 3.3.3
9
+ Requires PHP: 5.6
10
+ Stable tag: trunk
11
+ License: GPLv2 or later
12
+ License URI: http://www.gnu.org/licenses/gpl-2.0.html
13
+
14
+ The pioneer multi-vendor plugin for WordPress. Start your own marketplace in minutes!
15
+
16
+ == Description ==
17
+
18
+ = Dokan Multivendor Marketplace Plugin For WordPress =
19
+
20
+ Dokan is the best front end multi vendor marketplace on WordPress, powered by WooCommerce. Build your own Amazon, Shopify, eBay, Magento like marketplace in just 30 minutes. Dokan is the fastest way to start ecommerce and earn through commissions with products ranging from digital, physical to variable.
21
+
22
+ **The best Frontend user interface**
23
+
24
+ We love the philosophy of a complete frontend experience. So, vendors have their personalised dashboard on the store frontend where they can find all what they need. Backend access is restricted to the admin only. This sets Dokan apart on a higher ground. All of our add-ons are frontend compatible. Dokan(Pro) comes with a free responsive ecommerce theme that has widgets specially made for Dokan.
25
+
26
+ **It’s fast and easy to use**
27
+
28
+ Your business operations with Dokan is smooth and fast. Everything will work as you expected because we have designed the experience following the best intuitive practices from popular ecommerce activators like WooCommerce, Bigcommerce etc.
29
+
30
+ **Reliable yet a growing platform**
31
+
32
+ We regularly keep our version updated for flawless operation and integration with dependable services. We just not only keep things compatible, we have a style of adding the most trendy new features to Dokan with every update.
33
+
34
+ **A really scalable market**
35
+
36
+ You can have unlimited vendors and vendors can create unlimited products. Currently 5 product types are supported eg. physical product, downloadable product, variable product, bookable products through the [Dokan WC Bookings](https://wedevs.com/products/plugins/dokan/woocommerce-booking-integration/) add on and auction products through the [Dokan Simple Auction](https://wedevs.com/products/plugins/dokan/dokan-simple-auctions/) add on.
37
+
38
+ **Earn in many ways**
39
+
40
+ Profit doesn’t only rely on sales. Multiple ways allow earning through vendor commissions or product based commissions. You can also create subscription packs that allow you to charge for product uploads, product limits and time.
41
+
42
+ **Puts you in control**
43
+
44
+ As a an admin, you can use Dokan in a way where you can control everything that happens in your marketplace. Product publishing, vendor registration, subscription renewal and every other vendor activity can be re routed through you.
45
+
46
+ > Get the [**Pro Version**](https://wedevs.com/dokan/?utm_source=wporg&utm_medium=cta&utm_campaign=dokan-lite) with bunch of super features, updates and scope for powerful add-ons.
47
+
48
+ = Features =
49
+ **Marketplace with Independent Stores**
50
+
51
+ * Every seller gets their own store with a unique URL and branding.
52
+ * Beautiful storefront styles with contact details and widgets
53
+ * Store location map on store front. (Pro feature)
54
+
55
+ **Frontend Dashboard For Each Seller**
56
+
57
+ * WordPress admin area can be accessed only by admin.
58
+ * Vendors manage products, orders, withdraws everything from site frontend.
59
+
60
+ **Earn From Each Sale**
61
+
62
+ * A part of the sale value is sent to admin as commission.
63
+ * Commission rate can be customized.
64
+ * Per vendor percentage override. (**Pro feature**)
65
+
66
+ **Product Management**
67
+
68
+ * Create and manage your products from the frontend.
69
+ * Create variable or downloadable products. (**Pro Feature**)
70
+ * Vendors have option to manage product shipping, attributes. (**Pro Feature**)
71
+ * Vendors can manage downloadable product permission, expiry date and download limit. (**Pro Feature**)
72
+
73
+ **Reports (Pro Feature)**
74
+
75
+ * Vendors can see their sales report, generate statements and overview from frontend.
76
+ * Admins can overview orders and filter by sale, by date, top vendors or top earners.
77
+ * Export order reports to CSV.
78
+
79
+ **Coupon Management (Pro Feature)**
80
+
81
+ * Manage and offer discounts for each product.
82
+ * Set expiry and restriction for coupons.
83
+
84
+ **Manage Product Reviews (Pro Feature)**
85
+
86
+ * All product reviews are managed by vendors (with admin override)
87
+ * View all reviews on products left by customers.
88
+
89
+ **Pro Features Continued**
90
+
91
+ *The admin panel gives you some powerful management tools*
92
+
93
+ * Admin can view and manage vendor list
94
+ * Admin can view his as well as every vendor’s earning reports individually
95
+ * Dokan Pro has update and support option for customer.
96
+ * Dokan tools option has page installer and Sync table option
97
+ * Advanced settings for the admin -
98
+ * General Settings
99
+ * Admin can enable/disable the map on the store page.
100
+ * Admin can enable/disable the contact form on the store page
101
+ * Admin can also enable/disable the store sidebar from theme.
102
+
103
+ * Selling Options
104
+ * Admin can manage new product status.
105
+ * Admin can set the order status for withdraw.
106
+ * Admin can seth threshold withdraw day for the vendor.
107
+ * Admin can change the vendor store URL.
108
+ * Admin can also enable/disable the permission of review editing for the vendor.
109
+
110
+ * Widgets
111
+ * Best vendor widget
112
+ * Featured vendor widget
113
+ * Store contact widget
114
+ * Store location widget
115
+
116
+ And much more. Checkout the [**Pro Version**](https://wedevs.com/dokan/?utm_source=wporg&utm_medium=cta&utm_campaign=dokan-lite)
117
+
118
+ = Contribute =
119
+ This may have bugs and lack of many features. If you want to contribute on this project, you are more than welcome. Please fork the repository from [Github](https://github.com/weDevsOfficial/dokan).
120
+
121
+ = Author =
122
+ Brought to you by [Tareq Hasan](http://tareq.co) from [weDevs](http://wedevs.com)
123
+
124
+ == Installation ==
125
+
126
+ Extract the zip file and just drop the contents in the wp-content/plugins/ directory of your WordPress installation and then activate the Plugin from Plugins page.
127
+
128
+ == Frequently Asked Questions ==
129
+
130
+ = Q. Can I add a payment method? =
131
+ A. Just use any standard WooCommerce payment gateway.
132
+
133
+ = Q. How do withdrawals work? =
134
+ A. Right now, we offer PayPal, Bank and Skrill (pro) withdraw method for "Dokan". For PayPal withdraw, you can generate Mass Payment File to payout your sellers at once. Other methods are manual though.
135
+
136
+ = Q. Does Dokan integrate with BuddyPress? =
137
+ A. Not for the moment. We have plans to integrate with BuddyPress via an add-on in the near future.
138
+
139
+ = Q. Is Dokan responsive? =
140
+ A. Yes, Dokan is fully responsive. We take mobile first approach and it displays very well in mobile and tablet devices. We are using Twitter Bootstrap as a framework and it just works.
141
+
142
+ = Q. Does it supports variable products? =
143
+ A. The **Pro** version does! You can seller normal products, downloadable products and variable products with your own attributes.
144
+
145
+ = Q. Can each vendor customize his store? =
146
+ A. Right now we have options for only changing the store banner page. We are working on a better customizable seller store page.
147
+
148
+ = Q. Does Dokan supports PayPal adaptive payments? =
149
+ A. Yes it does! We have [an add-on](http://wedevs.com/plugin/dokan/paypal-adaptive-payments/) that brings PayPal adaptive payment support.
150
+
151
+ = Q. Will it be possible to take a cut or commission from the sales? =
152
+ A. Yes, that's how Dokan works. In every sales, you can cut a commission from a order. That's configurable from Dokan settings.
153
+
154
+ = Q. Can Dokan be used in a single seller mode? =
155
+ A. Obviously, you can use this on a single seller site to give them a nice front-end experience.
156
+
157
+ = Q. How to upgrade to the Pro version?
158
+ A. Just install and activate the PRO version without deleting the free plugin. All your data will be safe on the database and some extra features will be added. If you feel something may go wrong, please consult with our [support](https://wedevs.com/contact/) staff first.
159
+
160
+ == Screenshots ==
161
+
162
+ 1. Admin Dashboard
163
+ 2. Withdraw requests from sellers
164
+ 3. Settings &rarr; General
165
+ 4. Settings &rarr; Selling Options
166
+ 5. Settings &rarr; Withdraw Options
167
+ 6. Settings &rarr; Page Settings
168
+ 7. Settings &rarr; Appearance
169
+ 8. Seller Dashboard in site frontend
170
+ 9. Frontend &rarr; Products Listing
171
+ 10. Frontend &rarr; Create a new Product
172
+ 11. Frontend &rarr; Edit a product
173
+ 12. Frontend &rarr; Orders Listing
174
+ 13. Frontend &rarr; Orders &rarr; Details
175
+ 14. Frontend &rarr; Submit withdraw request
176
+ 15. Frontend &rarr; Store Settings
177
+ 16. Frontend &rarr; Store Payment Settings
178
+ 17. Frontend &rarr; Individual Seller Store-1
179
+ 18. Frontend &rarr; Individual Seller Store-2
180
+ 19. Frontend &rarr; Individual Seller Store-3
181
+
182
+ == Changelog ==
183
+
184
+ v2.7.8 -> March 05, 2018
185
+ ------------------------
186
+ - **Tweak:** Added vendor field in the product quick edit page
187
+ - **Tweak:** Removed sellerdiv metabox when a seller can access the backend
188
+ - **Fix:** Sometimes seller balance turn into minus figure
189
+ - **Fix:** Vendor name is showing twice on the cart checkout page
190
+ - **Fix:** Seller balance is not updating when the withdraw request is approved
191
+ - **Fix:** Extra fee (shipping & tax) is not adding to admin balance when a new order is made
192
+ - **Fix:** Unable to save variable product if admin commission is set to fixed
193
+ - **Fix:** Product thumbnail image is not changing on updating new image
194
+ - **Fix:** Fixed withdraw approving issue from admin side
195
+ - **Fix:** Vendor profile completion need upload banner even there are no settings to add banner
196
+ - **Fix:** Fixed bulk withdraw approving issue
197
+ - **Fix:** Completion of suborders does not make the parent order status to complete
198
+
199
+ v2.7.7 -> Feb 4, 2018
200
+ ---------------------
201
+ - **New:** Add store URL field in backend user edit form
202
+ - **Tweak:** Compatibility with WooCommerce 3.3+
203
+ - **Fix:** Fixed wpdb error when multiple withdraw method enabled for vendor
204
+ - **Fix:** Fix settings icon issue
205
+ - **Fix:** Tooltip does not work in admin dashboard
206
+
207
+ v2.7.6 -> Feb 4, 2018
208
+ ---------------------
209
+ - **New:** Vendors can now add products from backend
210
+ - **Fix:** Error in new products creation while booking is enabled
211
+ - **Fix:** Admin is unable to see vendor's media in backend
212
+ - **Fix:** Fixed dependency check for WooCommerce
213
+ - **Fix:** Shop manager does not have any ability to manage WooCommerce
214
+ - **Fix:** Shortcode not rendering if user not logged in
215
+ - **Fix:** Changed ip column data size for withdraw table for comapatibility with ipv6 address
216
+ - **Fix:** Fixed settings menu redirecting to dashboad menu issue
217
+ - **Tweak:** Fixed admin order layout compatibility issue with WooCommerce 3.3
218
+
219
+ v2.7.5 -> Jan 24, 2018
220
+ ---------------------
221
+ - **Fix:** Fix tinymce conflict issue
222
+ - **Fix:** Fix showing other vendor products in vendor dashboard
223
+
224
+ v2.7.4 -> Jan 22, 2018
225
+ ---------------------
226
+ - **Fix:** Fix random plugin activation problem for older version udpating
227
+ - **Fix:** Fix order details page issue in vendor dashboard
228
+ - **Fix:** Updated product edit template priority so that it works with the latest version of WooCommerce
229
+
230
+ v2.7.3 -> Jan 21, 2018
231
+ ---------------------
232
+ - **New:** Added permissions for vendors
233
+ - **New:** Separate the vendor registration form through Shortcode
234
+ - **New:** Added different class for vendor address is fixed
235
+ - **New:** Product upload is now available on the backend for vendor
236
+ - **New:** Added filter `dokan_get_seller_percentage`
237
+ - **Fix:** Can't withdraw full fractional amount from vendor withdraw
238
+ - **Fix:** Internal server error while placing order from multiple vendors
239
+ - **Fix:** Sync order is still working even if we change admin commission fee
240
+ - **Fix:** Slider js issue fixed
241
+ - **Fix:** Product pageview counting issue
242
+ - **Fix:** Vendors wp-admin bar does not showing
243
+ - **Fix:** A vendor is supposed to have backend access to see his orders instead all vendors order is shown
244
+ - **Tweak:** Added admin fee as a order meta for better experience
245
+
246
+ v2.7.2 -> Dec 18, 2017
247
+ ---------------------
248
+ - **Fix:** Product attributes not saving properly
249
+ - **Fix:** missing text domains updated
250
+ - **Tweak:** Disabled withdraw request if no withdraw method is set
251
+
252
+ v2.7.1 -> Dec 13, 2017
253
+ ---------------------
254
+ - **Fix:** Added Order shipping track security nonce
255
+ - **Fix:** Fixed xss warnings
256
+ - **Fix:** Fix store widget register issue
257
+ - **Fix:** Added icon style in settings page
258
+ - **Fix:** Change user avatar rendering issue
259
+ - **Fix:** Store category value selected after reloading
260
+ - **Fix:** Fix attribute saving issue
261
+ - **Fix:** Store contact form widget is now working in single product page
262
+ - **Fix:** Fix some styling issue in product popup page
263
+
264
+ v2.7.0 -> Nov 23, 2017
265
+ ---------------------
266
+ - **Fix:** Remove duplicate help menu and unwanted text
267
+ - **Fix:** Fixed price suggestion when flat rate commission set from admin fixed
268
+ - **Fix:** Fixed xss and csrf issues for some security
269
+
270
+ v2.6.10 -> Nov 13, 2017
271
+ ---------------------
272
+ - **New:** Added dokan CRUD classes
273
+ - **New:** Added help menu on Dokan Admin Dashboard
274
+ - **Tweak:** Dokan Admin settings page redesigned
275
+ - **Tweak:** Price suggestion made compatible with Flat commission
276
+ - **Tweak:** Admin setup wizard styles updated
277
+ - **Fix:** Fixed casting issue in updater class
278
+ - **Fix:** Product status update on vendor status toggle
279
+ - **Fix:** Commission calculation issue fixed
280
+ - **Fix:** Store banner width and height not working properly
281
+ - **Fix:** Order filtering is showing wrong pagination
282
+
283
+ v2.6.9 -> Oct 17, 2017
284
+ ---------------------
285
+ - **New:** Depends on vendor commission, pricing suggession is added in new and edit product template
286
+ - **New:** Added admin settings for showing/hiding customer info in order details page
287
+ - **New:** Both flat and percentage commission system added for vendor
288
+ - **New:** Added functinality for deleting vendor details when the vendor account is deleted
289
+ - **New:** Added documentaion links in dokan settings and pages
290
+ - **Fix:** Clearing and restoring all caching issue
291
+ - **Fix:** Disabled order editing option when the order status is cancelled or refunded
292
+ - **Fix:** Product image uploading permission issue fixed
293
+ - **Fix:** Store layout breaks when the address is too long fixed
294
+ - **Fix:** Non numerical error fixed for php latest versions
295
+ - **Fix:** Fix vendor order inserting undefined notices
296
+
297
+ v2.6.8 -> Sep 7, 2017
298
+ ---------------------
299
+ - **New:** Dokan Emails now configurable from WooCommerce Email settings with theme override support
300
+ - **New:** Canceled withdraw requests are now shown for vendor
301
+ - **Fix:** Date time format fixed for order and product listing to support global format
302
+ - **Fix:** saving variable product prices
303
+ - **Tweak:** fontawesome library updated
304
+
305
+ v2.6.7 -> Aug 3, 2017
306
+ ---------------------
307
+ - **Fix:** Fix multiple vendor order creating issue
308
+ - **Fix:** Disable pre defined attribute which already set with product
309
+
310
+ v2.6.6 -> July 31, 2017
311
+ ---------------------
312
+ - **Fix:** Dokan Emails are not translating
313
+ - **Fix:** 'No result found' text on product edit page not translating
314
+ - **Fix:** Order sync offset problem during checkout
315
+ - **Fix:** All graph rtl problem
316
+ - **Tweak:** Vendor dashboard graph RTL enhanced
317
+ - **Tweak:** Filter added to customize shop address
318
+ - **Tweak:** Several other code enhancement and optimization
319
+
320
+ v2.6.5 -> July 16, 2017
321
+ ---------------------
322
+ - **New:** Added IBAN and Routing number fields for vendor's Bank info section
323
+ - **New:** Added settings in admin panel to disable Vendor Welcome Wizard
324
+ - **New:** Added filter `dokan_seller_registration_required_fields`
325
+ - **New:** Store Category widget design updated
326
+ - **New:** Added Dokan logo as menu icon in admin dashboard
327
+ - **New:** Dokan Store Sidebar widget area now available for all themes
328
+ - **Fix:** Store categories are not updating properly
329
+ - **Fix:** Showing store location widget if location is not set
330
+ - **Fix:** Withdraw not working for IP address with port number
331
+ - **Tweak:** Enahanced RTL support
332
+ - **Tweak:** Profile Completion progress filter args updated
333
+
334
+ v2.6.4 -> June 22, 2017
335
+ ---------------------
336
+ - **Fix:** Store page product loop pagination not showing
337
+ - **Fix:** Order exporting not working properly
338
+ - **Fix:** Earning calculation date range issue
339
+ - **Tweak:** Banner upload is now available in store settings for all appearances
340
+ - **Tweak:** Profile completion progress custom values logic updated
341
+ - **Tweak:** Downloadable product section performance tweaks
342
+
343
+ v2.6.3 -> June 08, 2017
344
+ ---------------------
345
+ - **Fix:** Missing text domains updated
346
+ - **Fix:** Featured Seller, Best Seller and Top Seller query fixed for older version of WooCommerce
347
+ - **Fix:** Translation issue fixed on withdraw template
348
+ - **Fix:** Store pages template conflitcs with theme home page
349
+ - **Tweak:** Various other code improvements
350
+
351
+ v2.6.2 -> May 18, 2017
352
+ ---------------------
353
+ - **New:** Dynamic state select option for Vendor Setup Wizard
354
+ - **Fix:** Change Product Seller from admin not working properly for variation products
355
+ - **Fix:** Store listing search not showing same result if submitted
356
+ - **Fix:** Store listing search sending multiple requests on AJAX
357
+ - **Fix:** Feature products, Best selling products and Top rated seller queries fixed
358
+ - **Fix:** Fixed Order status label issue in seller order listing
359
+ - **Tweak:** Added currency argument for wc_price
360
+ - **Tweak:** Various helper text labels updated
361
+
362
+ v2.6.1 -> May 04, 2017
363
+ ---------------------
364
+ - **New:** Filter added `dokan_get_seller_earnings`
365
+ - **Fix:** `dokan-dashboard` shortcode not rendering properly
366
+ - **Fix:** Clear cache on vendor balance update
367
+ - **Fix:** Order regenerate order status issue
368
+ - **Fix:** Vendor wizard showing blank page
369
+ - **Fix:** Downloadable product grant access issue in vendor order
370
+ - **Fix:** Rating display on widget not working properly
371
+ - **Fix:** Single product view sales schedule issue fixed
372
+ - **Fix:** Vendor Product visibility and catalog issue fixed
373
+ - **Fix:** Date range issue fixed for vendor balance
374
+ - **Tweak:** Refill submitted values on error while adding new product
375
+ - **Tweak:** Updated posted value handler function
376
+ - **Tweak:** Hide view action on product listing if status is pending
377
+
378
+ v2.6.0 -> April 18, 2017
379
+ ---------------------
380
+ - **New:** Made dokan compatible with WC 3.0
381
+ - **New:** Store listing design updated with city added
382
+ - **Tweak:** Store listing banner image streched for full view
383
+ - **Fix:** Variations attribute issue fixed
384
+ - **Fix:** Sub-order not created for multiple seller is fixed
385
+ - **Fix:** Seller dashboard product and order listing showing notices fixed
386
+ - **Fix:** Seller new product add page showing notices fixed
387
+ - **Fix:** Saving digital product data with WC 3.0
388
+ - **Fix:** Saving variation product data with WC 3.0
389
+ - **Fix:** Registration form now working with WC 3.0
390
+
391
+ v2.5.7 -> March 30, 2017
392
+ ----------------------
393
+ - **New:** New design for store listing page
394
+ - **New:** Added gallery image uploader in add new product popup and page
395
+ - **New:** Added `dokan_get_seller_amount_from_order` filter
396
+ - **Fix:** Shipping tracking modal issue for third-party theme conflicting
397
+ - **Fix:** Dokan updater issue fixed
398
+ - **Fix:** Fix store listing search
399
+ - **Fix:** "More tab" checkbox saving issue on store settings
400
+ - **Fix:** Some translation issue fixed in product page
401
+ - **Tweak:** Remove modal js library
402
+ - **Tweak:** Remove default placeholder content from product description in new product page
403
+ - **Tweak:** Change required field state to country in store settings
404
+
405
+ v2.5.6 -> March 16, 2017
406
+ ----------------------
407
+ - **Fix:** If no withdraw limit is set then it defaults to ‘0’
408
+ - **Fix:** Remove add to cart fragment filter for thirdparty theme conflicting
409
+ - **New:** Added `dokan_seller_total_sales`, `dokan_get_formatted_seller_balance` and `dokan_get_seller_balance` filter
410
+
411
+ v2.5.5 -> March 13, 2017
412
+ ---------------------
413
+ - **Tweak:** Enabled showing cancelled orders in case of multiple sub-orders
414
+ - **Fix:** Fixed js error on my-account page
415
+ - **Fix:** Fixed reports showing wrong curve
416
+ - **Fix:** Text domain issue fixed
417
+
418
+ v2.5.4 -> March 8, 2017
419
+ ----------------------
420
+ - **Tweak:** Changed text domain from 'dokan' to 'dokan-lite'
421
+ - **New:** Added settings to turn on/off new product form pop-up
422
+ - **New:** Added schedule discount price fields in new product form template when popup settings is disabled
423
+ - **Fix:** Dokan Tabs css fixed for better compatibility with all themes
424
+ - **Fix:** Fixed issues with saving product types other than simple like booking/auction
425
+ - **Fix:** Fixed issues with withdraw balance and status
426
+ - **Fix:** Template rendering issue on Store page and Review page for vendors is fixed.
427
+
428
+ v2.5.3 -> February 14, 2017
429
+ ----------------------
430
+ - **Fix:** Order Tracking modal not working properly in some themes
431
+ - **Fix:** Fixed showing notice on customer order table for multiple vendors
432
+ - **Fix:** Fixed product listing status count issue
433
+ - **Fix:** Fixed withdraw status messages and calculation
434
+ - **Tweak:** Removed un-necessary codes and optimized code structure
435
+
436
+ v2.5.2 -> January 25, 2017
437
+ ----------------------
438
+ - **New:** Added filter 'dokan_new_product_popup_args' to enable custom validation on new product add
439
+ - **New:** Enabled vendors to select all products while creating coupon
440
+ - **Fix:** On plugin activation auto flush rewrite rules
441
+ - **Fix:** Seller Setup wizard not translating properly in some cases
442
+ - **Fix:** Shipping tracking modal not showing while bootstrap loaded is fixed
443
+ - **Fix:** Vendor statement enhanced for calculating per product commission
444
+ - **Tweak:** Seller setup wizard enhanced for responsiveness
445
+ - **Tweak:** Seller dashboard widgets enhanced for better responsiveness
446
+ - **Tweak:** Add new product pop up enhanced for better responsiveness
447
+ - **Tweak:** Several other optimizations to codebase for better and stable performance
448
+
449
+ v2.5.1 -> January 12, 2017
450
+ ---------------------
451
+ - **New:** Front-End product template new UI
452
+ - **Tweak:** All SELLER text is changed to VENDOR
453
+ - **Tweak:** Updated Seller Earning Statement Report View
454
+ - **Tweak:** Fixed variable product data saving issues
455
+ - **Tweak:** Changed Order Tracking options from Select to Text box for sellers
456
+ - **Tweak:** Improved Responsiveness on seller dashboard pages
457
+ - **Tweak:** Product commission option is moved to advance tab from general
458
+ - **Fix:** Improved Seller Setup wizard for better UX
459
+ - **Fix:** Improved Seller Setup wizard for better UX
460
+ - **Fix:** Fixed showing error If Google MAP API is not given
461
+ - **Fix:** Fixed Extra fee receiver not working issue
462
+
463
+ = v2.5 -> October 18, 2016 =
464
+ ---------------------
465
+ - **New:** Setup Wizard on Admin panel
466
+ - **New:** Setup Wizard for seller settings after new seller registration
467
+ - **New:** Multiple header templates for store template
468
+ - **New:** Added DOKAN shortcode insert button on post/page editor
469
+ - **New:** Added store search option on store listing page
470
+ - **New:** Added detailed income and withdraw statement for sellers
471
+ - **New:** Added option to choose tax and shipping receiver as admin or seller.
472
+ - **New:** Show seller payment options on user profile in back-end.
473
+ - **Tweak:** Dokan store listing shortcode has more options
474
+ - **Tweak:** Flat rate shipping synced with zone ID
475
+ - **Tweak:** Fixed Tab view variation products
476
+ - **Tweak:** Added active states in product review status filter
477
+ - **Fix:** Fixed front-end variation issue for other languages
478
+ - **Fix:** Fixed product add while selling is disabled for sellers
479
+
480
+ = v2.4.12 -> August 08, 2016 =
481
+ ---------------------
482
+ - **New:** Product base admin commission
483
+ - **New:** Sellers coupon show on store
484
+ - **Tweak:** Added Settings for gMap API key
485
+ - **Fix:** Product with same sku
486
+ - **Fix:** Product permalink, defaults to 'product'
487
+ - **Fix:** Image upload attribute undefined issue
488
+ - **Fix:** Multiple seller order mail
489
+ - **Fix:** Product sku search
490
+ - **Fix:** Store search by store name
491
+
492
+
493
+ = v2.4.11 -> May 29, 2016 =
494
+ ---------------------
495
+ - **New:** Refund request from seller to admin by sellers order details page
496
+ - **New:** Tracker added
497
+ - **Fix:** Checkout issue if flat rate shipping set as null
498
+ - **Fix:** Change seller display name to store name
499
+ - **Fix:** Multiple submit request on product add/edit
500
+ - **Fix:** Undefine error on cart page for shipping additional price
501
+ - **Fix:** Product edit page permission
502
+ - **Fix:** Remove duplicate insert on dokan order table
503
+
504
+ = v2.4.10 -> February 24, 2016 =
505
+ ---------------------
506
+ - **New:** New dashboard menu added for 'store link', 'edit account' and 'sign out'
507
+ - **Fix:** Remove repeated data rendering on admin panel dokan earning section
508
+ - **Fix:** Terms and condition not showing on registration issue
509
+ - **Fix:** Dashboard/orders page single view responsive issue
510
+ - **Fix:** Product edit and add issue on Firefox and IE browser
511
+ - **Fix:** Product variation save and update issues
512
+
513
+ = v2.4.9 -> February 01, 2016 =
514
+ ---------------------
515
+ - **New:** Plugin help page added
516
+ - **New:** Seller search added on store listing
517
+ - **Tweak:** Some validation on contact seller email handler and after sent hook updated
518
+ - **Tweak:** Category check added on new product add without reloading page
519
+ - **Tweak:** Auto suggestion and clear button on flat view variation product attributes input field
520
+ - **Fix:** Downloadable file change in product after order issue fixed
521
+ - **Fix:** Order status translation issue on order listing page
522
+ - **Fix:** Email not send to seller on new order issue fixed
523
+ - **Fix:** Allow float number for seller percentage
524
+ - **Fix:** SEO hook updated for YOAST to make compatible with WP 4.4
525
+ - **Fix:** Browser jump issue in tab view on click of tabs
526
+
527
+ = v2.4.8 -> November 21, 2015 =
528
+ ---------------------
529
+ - **Tweak:** Email template override system added
530
+ - **Fix:** Change dokan SEO admin option section
531
+ - **Fix:** Ajax url fixed to prevent conflict
532
+ - **Fix:** Fix Arrow (reverted) for pagination
533
+ - **Fix:** Hide unapproved comment from store review tab
534
+ - **Fix:** Update cart discount meta on suborder create
535
+
536
+ = v2.4.7 -> October 20, 2015 =
537
+ ------------------------------
538
+ - **Fix:** Fix Coupon discount redundancy
539
+ - **Fix:** Fix product gallery image delete issue on tab view
540
+ - **Fix:** Fix translation issue on user migration form
541
+ - **Fix:** Fix Store listing template view for not logged-in user
542
+ - **Fix:** parent sub-order creation on unsuccessful payment by card
543
+ - **Fix:** Store page breadcrumb fixed to show Store name and listing link properly
544
+
545
+
546
+ = v2.4.6 -> October 12, 2015 =
547
+ ------------------------------
548
+ - **Tweak:** Added terms and condition option field on Registration form
549
+ - **Fix:** Remove required for product per page field on store settings
550
+ - **Fix:** Fix delete variation product issue on tab view for seller
551
+ - **Fix:** Fix redundant data for guest users
552
+ - **Fix:** Fix responsive issue on front page product listing
553
+ - **Fix:** Seller store banner size to cover
554
+ - **Fix:** Store template fix for Twenty Twelve theme
555
+
556
+
557
+ = v2.4.5 -> September 14, 2015 =
558
+ ------------------------------
559
+
560
+ - **Fix:** Fix responsive style issue for store page
561
+ - **Fix:** Fix undefined parent order object issue on creat sub-order
562
+ - **Fix:** Fix seller dashboard product comments count on widget
563
+
564
+ = v2.4.4 -> September 4, 2015 =
565
+
566
+ - **New:** Seller balance re-sync by checking unexpected order button added on tools page
567
+ - **Fix:** Make some text translatable on contact seller widget
568
+ - **Fix:** Optimize sql query to make regenerate process fast
569
+ - **Fix:** Fix WooCommerce deactivate dependency issue
570
+ - **Fix:** Fix plugin bulk activate issue with dokan welcome page
571
+
572
+ = v2.4.3 -> August 25, 2015 =
573
+
574
+ - **New:** Welcome page on activation with re-sync button added
575
+ - **Tweak:** Visual Progress bar added for re-sync Order progress
576
+ - **Fix:** Sub-order duplicate issue fixed
577
+ - **Fix:** Fix WP editor compatible to 4.3
578
+ - **Fix:** Compatible with WordPress 4.3 widget __construct functions
579
+ - **Fix:** Fix table name in sync table sql
580
+ - **Fix:** Fix store review rewrite problem, Move store functionality in Dokan_Pro_Store class
581
+ - **Fix:** Fix seller migration template loader
582
+ - **Fix:** Fix same seller multiple product type shipping issue
583
+ - **Fix:** Fix flat rate shipping issue for multi seller
584
+
585
+ = v2.4.2 -> August 12, 2015 =
586
+
587
+ - **Tweak:** New hook on store header: dokan_store_before_social
588
+ - **Tweak:** Re-arrange dokan admin settings fields
589
+ - **Tweak:** Add field on seller store settings to manage store product per page
590
+ - **Tweak:** Sellers redirected to dashboard after login
591
+ - **Fix:** Feature seller widget display template path
592
+ - **Fix:** Best seller widget display seller name changed to store name
593
+ - **Fix:** Fix problem with showing variation data on order details
594
+ - **Fix:** Update "dokan_create_seller_order" function to save variation order meta on sub-order
595
+ - **Fix:** Update "dokan_post_input_box" function to add option for making text field and number field required
596
+ - **Fix:** Fix balance separator problem on withdraw
597
+ - **Fix:** Fix total sales balance display on seller dashboard page
598
+ - **Fix:** Keep value saved of override shipping fields meta even when the option unchecked
599
+ - **Fix:** English language phrases correction on several place
600
+ - **Fix:** Fix calculation of sub-orders in WooCommerce dashboard status widget sales query
601
+
602
+ = 2.4.1 (August 1, 2015) =
603
+ - **New:** Pro version rewrite to Free
604
+
605
+ = 1.0 =
606
+ Initial version released
607
+
608
+
609
+ == Upgrade Notice ==
610
+
611
+ = 2.6.0 =
612
+ **Important Update** This update is compatible with WooCommerce 3.0. Make sure to backup and read full [changelog](https://docs.wedevs.com/docs/dokan/changelog/) for more details.
templates/dashboard/big-counter-widget.php CHANGED
@@ -11,9 +11,6 @@
11
  * @package dokan
12
  */
13
  ?>
14
- <style>
15
-
16
- </style>
17
  <div class="dashboard-widget big-counter">
18
  <ul class="list-inline">
19
  <li>
@@ -22,7 +19,7 @@
22
  </li>
23
  <li>
24
  <div class="title"><?php _e( 'Earning', 'dokan-lite' ); ?></div>
25
- <div class="count"><?php echo wc_price( dokan_get_seller_earnings( get_current_user_id() ) ) ?></div>
26
  </li>
27
  <li>
28
  <div class="title"><?php _e( 'Pageview', 'dokan-lite' ); ?></div>
@@ -43,6 +40,5 @@
43
  </li>
44
 
45
  <?php do_action( 'dokan_seller_dashboard_widget_counter' ); ?>
46
-
47
  </ul>
48
  </div> <!-- .big-counter -->
11
  * @package dokan
12
  */
13
  ?>
 
 
 
14
  <div class="dashboard-widget big-counter">
15
  <ul class="list-inline">
16
  <li>
19
  </li>
20
  <li>
21
  <div class="title"><?php _e( 'Earning', 'dokan-lite' ); ?></div>
22
+ <div class="count"><?php echo wc_price( dokan_get_seller_earnings( dokan_get_current_user_id() ) ) ?></div>
23
  </li>
24
  <li>
25
  <div class="title"><?php _e( 'Pageview', 'dokan-lite' ); ?></div>
40
  </li>
41
 
42
  <?php do_action( 'dokan_seller_dashboard_widget_counter' ); ?>
 
43
  </ul>
44
  </div> <!-- .big-counter -->
templates/global/no-permission.php ADDED
@@ -0,0 +1,78 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Dokan Dashboard Template
4
+ *
5
+ * Dokan Main Dahsboard template for Fron-end
6
+ *
7
+ * @since 2.4
8
+ *
9
+ * @package dokan
10
+ */
11
+ ?>
12
+ <div class="dokan-dashboard-wrap">
13
+ <?php
14
+
15
+ /**
16
+ * dokan_dashboard_content_before hook
17
+ *
18
+ * @hooked get_dashboard_side_navigation
19
+ *
20
+ * @since 2.4
21
+ */
22
+ do_action( 'dokan_dashboard_content_before' );
23
+ ?>
24
+
25
+ <div class="dokan-dashboard-content">
26
+
27
+ <?php
28
+
29
+ /**
30
+ * dokan_dashboard_content_before hook
31
+ *
32
+ * @hooked show_seller_dashboard_notice
33
+ *
34
+ * @since 2.4
35
+ */
36
+ do_action( 'dokan_dashboard_content_inside_before' );
37
+ ?>
38
+
39
+ <article class="dashboard-content-area">
40
+
41
+ <?php
42
+
43
+ /**
44
+ * dokan_dashboard_before_widgets hook
45
+ *
46
+ * @hooked dokan_show_profile_progressbar
47
+ *
48
+ * @since 2.4
49
+ */
50
+ dokan_get_template_part( 'global/dokan-error', '', array( 'deleted' => false, 'message' => __( 'You have no permission to view this page', 'dokan-lite' ) ) );
51
+ ?>
52
+
53
+ </article><!-- .dashboard-content-area -->
54
+
55
+ <?php
56
+
57
+ /**
58
+ * dokan_dashboard_content_inside_after hook
59
+ *
60
+ * @since 2.4
61
+ */
62
+ do_action( 'dokan_dashboard_content_inside_after' );
63
+ ?>
64
+
65
+
66
+ </div><!-- .dokan-dashboard-content -->
67
+
68
+ <?php
69
+
70
+ /**
71
+ * dokan_dashboard_content_after hook
72
+ *
73
+ * @since 2.4
74
+ */
75
+ do_action( 'dokan_dashboard_content_after' );
76
+ ?>
77
+
78
+ </div><!-- .dokan-dashboard-wrap -->
templates/orders/date-export.php CHANGED
@@ -20,6 +20,9 @@
20
 
21
  <form action="" method="POST" class="dokan-right">
22
  <div class="dokan-form-group">
 
 
 
23
  <input type="submit" name="dokan_order_export_all" class="dokan-btn dokan-btn-sm dokan-btn-danger dokan-btn-theme" value="<?php esc_attr_e( 'Export All', 'dokan-lite' ); ?>">
24
  <input type="submit" name="dokan_order_export_filtered" class="dokan-btn dokan-btn-sm dokan-btn-danger dokan-btn-theme" value="<?php esc_attr_e( 'Export Filtered', 'dokan-lite' ); ?>">
25
  <input type="hidden" name="order_date" value="<?php echo isset( $_GET['order_date'] ) ? sanitize_key( $_GET['order_date'] ) : ''; ?>">
20
 
21
  <form action="" method="POST" class="dokan-right">
22
  <div class="dokan-form-group">
23
+ <?php
24
+ wp_nonce_field( 'dokan_vendor_order_export_action', 'dokan_vendor_order_export_nonce' );
25
+ ?>
26
  <input type="submit" name="dokan_order_export_all" class="dokan-btn dokan-btn-sm dokan-btn-danger dokan-btn-theme" value="<?php esc_attr_e( 'Export All', 'dokan-lite' ); ?>">
27
  <input type="submit" name="dokan_order_export_filtered" class="dokan-btn dokan-btn-sm dokan-btn-danger dokan-btn-theme" value="<?php esc_attr_e( 'Export Filtered', 'dokan-lite' ); ?>">
28
  <input type="hidden" name="order_date" value="<?php echo isset( $_GET['order_date'] ) ? sanitize_key( $_GET['order_date'] ) : ''; ?>">
templates/orders/details.php CHANGED
@@ -1,9 +1,9 @@
1
  <?php
2
- global $woocommerce, $current_user, $wpdb;
3
 
4
  $order_id = isset( $_GET['order_id'] ) ? intval( $_GET['order_id'] ) : 0;
5
 
6
- if ( !dokan_is_seller_has_order( $current_user->ID, $order_id ) ) {
7
  echo '<div class="dokan-alert dokan-alert-danger">' . __( 'This is not yours, I swear!', 'dokan-lite' ) . '</div>';
8
  return;
9
  }
@@ -164,29 +164,32 @@ $hide_customer_info = dokan_get_option( 'hide_customer_info', 'dokan_selling', '
164
  <span><?php _e( 'Order Status:', 'dokan-lite' ); ?></span>
165
  <label class="dokan-label dokan-label-<?php echo dokan_get_order_status_class( dokan_get_prop( $order, 'status' ) ); ?>"><?php echo isset( $statuses[dokan_get_prop( $order, 'status' )] ) ? $statuses[dokan_get_prop( $order, 'status' )] : dokan_get_prop( $order, 'status' ); ?></label>
166
 
167
- <?php if ( dokan_get_option( 'order_status_change', 'dokan_selling', 'on' ) == 'on' && $order->get_status() !== 'cancelled' && $order->get_status() !== 'refunded' ) {?>
168
  <a href="#" class="dokan-edit-status"><small><?php _e( '&nbsp; Edit', 'dokan-lite' ); ?></small></a>
169
  <?php } ?>
170
  </li>
171
- <li class="dokan-hide">
172
- <form id="dokan-order-status-form" action="" method="post">
 
 
 
 
 
 
 
 
 
173
 
174
- <select id="order_status" name="order_status" class="form-control">
175
- <?php
176
- foreach ( $statuses as $status => $label ) {
177
- echo '<option value="' . esc_attr( $status ) . '" ' . selected( $status, 'wc-' . dokan_get_prop( $order, 'status' ), false ) . '>' . esc_html__( $label, 'dokan-lite' ) . '</option>';
178
- }
179
- ?>
180
- </select>
181
 
182
- <input type="hidden" name="order_id" value="<?php echo dokan_get_prop( $order, 'id' ); ?>">
183
- <input type="hidden" name="action" value="dokan_change_status">
184
- <input type="hidden" name="_wpnonce" value="<?php echo wp_create_nonce( 'dokan_change_status' ); ?>">
185
- <input type="submit" class="dokan-btn dokan-btn-success dokan-btn-sm" name="dokan_change_status" value="<?php _e( 'Update', 'dokan-lite' ); ?>">
186
 
187
- <a href="#" class="dokan-btn dokan-btn-default dokan-btn-sm dokan-cancel-status"><?php _e( 'Cancel', 'dokan-lite' ) ?></a>
188
- </form>
189
- </li>
190
  <li>
191
  <span><?php _e( 'Order Date:', 'dokan-lite' ); ?></span>
192
  <?php echo dokan_get_date_created( $order ); ?>
@@ -263,7 +266,10 @@ $hide_customer_info = dokan_get_option( 'hide_customer_info', 'dokan_selling', '
263
  <?php echo wpautop( wptexturize( wp_kses_post( $note->comment_content ) ) ); ?>
264
  </div>
265
  <p class="meta">
266
- <?php printf( __( 'added %s ago', 'dokan-lite' ), human_time_diff( strtotime( $note->comment_date_gmt ), current_time( 'timestamp', 1 ) ) ); ?> <a href="#" class="delete_note"><?php _e( 'Delete note', 'dokan-lite' ); ?></a>
 
 
 
267
  </p>
268
  </li>
269
  <?php
@@ -277,26 +283,28 @@ $hide_customer_info = dokan_get_option( 'hide_customer_info', 'dokan_selling', '
277
  add_filter( 'comments_clauses', array( 'WC_Comments', 'exclude_order_comments' ), 10, 1 );
278
  ?>
279
  <div class="add_note">
280
- <h4><?php _e( 'Add note', 'dokan-lite' ); ?></h4>
281
- <form class="dokan-form-inline" id="add-order-note" role="form" method="post">
282
- <p>
283
- <textarea type="text" id="add-note-content" name="note" class="form-control" cols="19" rows="3"></textarea>
284
- </p>
285
- <div class="clearfix">
286
- <div class="order_note_type dokan-form-group">
287
- <select name="note_type" id="order_note_type" class="dokan-form-control">
288
- <option value="customer"><?php _e( 'Customer note', 'dokan-lite' ); ?></option>
289
- <option value=""><?php _e( 'Private note', 'dokan-lite' ); ?></option>
290
- </select>
 
 
 
 
 
 
 
 
291
  </div>
292
-
293
- <input type="hidden" name="security" value="<?php echo wp_create_nonce('add-order-note'); ?>">
294
- <input type="hidden" name="delete-note-security" id="delete-note-security" value="<?php echo wp_create_nonce('delete-order-note'); ?>">
295
- <input type="hidden" name="post_id" value="<?php echo dokan_get_prop( $order, 'id' ); ?>">
296
- <input type="hidden" name="action" value="dokan_add_order_note">
297
- <input type="submit" name="add_order_note" class="add_note btn btn-sm btn-theme" value="<?php esc_attr_e( 'Add Note', 'dokan-lite' ); ?>">
298
- </div>
299
- </form>
300
 
301
  <div class="clearfix dokan-form-group" style="margin-top: 10px;">
302
  <!-- Trigger the modal with a button -->
@@ -319,6 +327,7 @@ $hide_customer_info = dokan_get_option( 'hide_customer_info', 'dokan_selling', '
319
  </div>
320
 
321
  <input type="hidden" name="security" id="security" value="<?php echo wp_create_nonce('add-shipping-tracking-info'); ?>">
 
322
  <input type="hidden" name="post_id" id="post-id" value="<?php echo dokan_get_prop( $order, 'id' ); ?>">
323
  <input type="hidden" name="action" id="action" value="dokan_add_shipping_tracking_info">
324
 
1
  <?php
2
+ global $woocommerce, $wpdb;
3
 
4
  $order_id = isset( $_GET['order_id'] ) ? intval( $_GET['order_id'] ) : 0;
5
 
6
+ if ( !dokan_is_seller_has_order( dokan_get_current_user_id(), $order_id ) ) {
7
  echo '<div class="dokan-alert dokan-alert-danger">' . __( 'This is not yours, I swear!', 'dokan-lite' ) . '</div>';
8
  return;
9
  }
164
  <span><?php _e( 'Order Status:', 'dokan-lite' ); ?></span>
165
  <label class="dokan-label dokan-label-<?php echo dokan_get_order_status_class( dokan_get_prop( $order, 'status' ) ); ?>"><?php echo isset( $statuses[dokan_get_prop( $order, 'status' )] ) ? $statuses[dokan_get_prop( $order, 'status' )] : dokan_get_prop( $order, 'status' ); ?></label>
166
 
167
+ <?php if ( current_user_can( 'dokan_manage_order' ) && dokan_get_option( 'order_status_change', 'dokan_selling', 'on' ) == 'on' && $order->get_status() !== 'cancelled' && $order->get_status() !== 'refunded' ) {?>
168
  <a href="#" class="dokan-edit-status"><small><?php _e( '&nbsp; Edit', 'dokan-lite' ); ?></small></a>
169
  <?php } ?>
170
  </li>
171
+ <?php if ( current_user_can( 'dokan_manage_order' ) ): ?>
172
+ <li class="dokan-hide">
173
+ <form id="dokan-order-status-form" action="" method="post">
174
+
175
+ <select id="order_status" name="order_status" class="form-control">
176
+ <?php
177
+ foreach ( $statuses as $status => $label ) {
178
+ echo '<option value="' . esc_attr( $status ) . '" ' . selected( $status, 'wc-' . dokan_get_prop( $order, 'status' ), false ) . '>' . esc_html__( $label, 'dokan-lite' ) . '</option>';
179
+ }
180
+ ?>
181
+ </select>
182
 
183
+ <input type="hidden" name="order_id" value="<?php echo dokan_get_prop( $order, 'id' ); ?>">
184
+ <input type="hidden" name="action" value="dokan_change_status">
185
+ <input type="hidden" name="_wpnonce" value="<?php echo wp_create_nonce( 'dokan_change_status' ); ?>">
186
+ <input type="submit" class="dokan-btn dokan-btn-success dokan-btn-sm" name="dokan_change_status" value="<?php _e( 'Update', 'dokan-lite' ); ?>">
 
 
 
187
 
188
+ <a href="#" class="dokan-btn dokan-btn-default dokan-btn-sm dokan-cancel-status"><?php _e( 'Cancel', 'dokan-lite' ) ?></a>
189
+ </form>
190
+ </li>
191
+ <?php endif ?>
192
 
 
 
 
193
  <li>
194
  <span><?php _e( 'Order Date:', 'dokan-lite' ); ?></span>
195
  <?php echo dokan_get_date_created( $order ); ?>
266
  <?php echo wpautop( wptexturize( wp_kses_post( $note->comment_content ) ) ); ?>
267
  </div>
268
  <p class="meta">
269
+ <?php printf( __( 'added %s ago', 'dokan-lite' ), human_time_diff( strtotime( $note->comment_date_gmt ), current_time( 'timestamp', 1 ) ) ); ?>
270
+ <?php if ( current_user_can( 'dokan_manage_order_note' ) ): ?>
271
+ <a href="#" class="delete_note"><?php _e( 'Delete note', 'dokan-lite' ); ?></a>
272
+ <?php endif ?>
273
  </p>
274
  </li>
275
  <?php
283
  add_filter( 'comments_clauses', array( 'WC_Comments', 'exclude_order_comments' ), 10, 1 );
284
  ?>
285
  <div class="add_note">
286
+ <?php if ( current_user_can( 'dokan_manage_order_note' ) ): ?>
287
+ <h4><?php _e( 'Add note', 'dokan-lite' ); ?></h4>
288
+ <form class="dokan-form-inline" id="add-order-note" role="form" method="post">
289
+ <p>
290
+ <textarea type="text" id="add-note-content" name="note" class="form-control" cols="19" rows="3"></textarea>
291
+ </p>
292
+ <div class="clearfix">
293
+ <div class="order_note_type dokan-form-group">
294
+ <select name="note_type" id="order_note_type" class="dokan-form-control">
295
+ <option value="customer"><?php _e( 'Customer note', 'dokan-lite' ); ?></option>
296
+ <option value=""><?php _e( 'Private note', 'dokan-lite' ); ?></option>
297
+ </select>
298
+ </div>
299
+
300
+ <input type="hidden" name="security" value="<?php echo wp_create_nonce('add-order-note'); ?>">
301
+ <input type="hidden" name="delete-note-security" id="delete-note-security" value="<?php echo wp_create_nonce('delete-order-note'); ?>">
302
+ <input type="hidden" name="post_id" value="<?php echo dokan_get_prop( $order, 'id' ); ?>">
303
+ <input type="hidden" name="action" value="dokan_add_order_note">
304
+ <input type="submit" name="add_order_note" class="add_note btn btn-sm btn-theme" value="<?php esc_attr_e( 'Add Note', 'dokan-lite' ); ?>">
305
  </div>
306
+ </form>
307
+ <?php endif; ?>
 
 
 
 
 
 
308
 
309
  <div class="clearfix dokan-form-group" style="margin-top: 10px;">
310
  <!-- Trigger the modal with a button -->
327
  </div>
328
 
329
  <input type="hidden" name="security" id="security" value="<?php echo wp_create_nonce('add-shipping-tracking-info'); ?>">
330
+ <?php wp_nonce_field( 'dokan_security_action', 'dokan_security_nonce' ); ?>
331
  <input type="hidden" name="post_id" id="post-id" value="<?php echo dokan_get_prop( $order, 'id' ); ?>">
332
  <input type="hidden" name="action" id="action" value="dokan_add_shipping_tracking_info">
333
 
templates/orders/downloadable.php CHANGED
@@ -39,7 +39,7 @@ global $wpdb;
39
  <?php
40
  echo '<option value=""></option>';
41
  global $wpdb;
42
- $user_id = get_current_user_id();
43
 
44
  $sql = "SELECT $wpdb->posts.* FROM $wpdb->posts
45
  INNER JOIN $wpdb->postmeta
39
  <?php
40
  echo '<option value=""></option>';
41
  global $wpdb;
42
+ $user_id = dokan_get_current_user_id();
43
 
44
  $sql = "SELECT $wpdb->posts.* FROM $wpdb->posts
45
  INNER JOIN $wpdb->postmeta
templates/orders/listing.php CHANGED
@@ -1,7 +1,7 @@
1
  <?php
2
  global $woocommerce;
3
 
4
- $seller_id = get_current_user_id();
5
  $order_status = isset( $_GET['order_status'] ) ? sanitize_key( $_GET['order_status'] ) : 'all';
6
  $paged = isset( $_GET['pagenum'] ) ? absint( $_GET['pagenum'] ) : 1;
7
  $limit = 10;
@@ -19,7 +19,9 @@ if ( $user_orders ) {
19
  <th><?php _e( 'Status', 'dokan-lite' ); ?></th>
20
  <th><?php _e( 'Customer', 'dokan-lite' ); ?></th>
21
  <th><?php _e( 'Date', 'dokan-lite' ); ?></th>
22
- <th width="17%"><?php _e( 'Action', 'dokan-lite' ); ?></th>
 
 
23
  </tr>
24
  </thead>
25
  <tbody>
@@ -29,13 +31,17 @@ if ( $user_orders ) {
29
  ?>
30
  <tr >
31
  <td class="dokan-order-id" data-title="<?php _e( 'Order', 'dokan-lite' ); ?>" >
32
- <?php echo '<a href="' . wp_nonce_url( add_query_arg( array( 'order_id' => dokan_get_prop( $the_order, 'id' ) ), dokan_get_navigation_url( 'orders' ) ), 'dokan_view_order' ) . '"><strong>' . sprintf( __( 'Order %s', 'dokan-lite' ), esc_attr( $the_order->get_order_number() ) ) . '</strong></a>'; ?>
 
 
 
 
33
  </td>
34
  <td class="dokan-order-total" data-title="<?php _e( 'Order Total', 'dokan-lite' ); ?>" >
35
  <?php echo $the_order->get_formatted_order_total(); ?>
36
  </td>
37
  <td class="dokan-order-status" data-title="<?php _e( 'Status', 'dokan-lite' ); ?>" >
38
- <?php echo '<span class="dokan-label dokan-label-' . dokan_get_order_status_class( dokan_get_prop( $the_order, 'status' ) ) . '">' . esc_html__( dokan_get_order_status_translated( dokan_get_prop( $the_order, 'status' ) ) ) . '</span>'; ?>
39
  </td>
40
  <td class="dokan-order-customer" data-title="<?php _e( 'Customer', 'dokan-lite' ); ?>" >
41
  <?php
@@ -83,50 +89,52 @@ if ( $user_orders ) {
83
  echo '<abbr title="' . esc_attr( dokan_date_time_format( $t_time ) ) . '">' . esc_html( apply_filters( 'post_date_column_time', dokan_date_time_format( $h_time, true ) , dokan_get_prop( $the_order, 'id' ) ) ) . '</abbr>';
84
  ?>
85
  </td>
86
- <td class="dokan-order-action" width="17%" data-title="<?php _e( 'Action', 'dokan-lite' ); ?>" >
87
- <?php
88
- do_action( 'woocommerce_admin_order_actions_start', $the_order );
89
-
90
- $actions = array();
91
-
92
- if ( dokan_get_option( 'order_status_change', 'dokan_selling', 'on' ) == 'on' ) {
93
- if ( in_array( dokan_get_prop( $the_order, 'status' ), array( 'pending', 'on-hold' ) ) ) {
94
- $actions['processing'] = array(
95
- 'url' => wp_nonce_url( admin_url( 'admin-ajax.php?action=dokan-mark-order-processing&order_id=' . dokan_get_prop( $the_order, 'id' ) ), 'dokan-mark-order-processing' ),
96
- 'name' => __( 'Processing', 'dokan-lite' ),
97
- 'action' => "processing",
98
- 'icon' => '<i class="fa fa-clock-o">&nbsp;</i>'
99
- );
100
- }
 
 
 
 
 
 
 
 
 
 
101
 
102
- if ( in_array( dokan_get_prop( $the_order, 'status' ), array( 'pending', 'on-hold', 'processing' ) ) ) {
103
- $actions['complete'] = array(
104
- 'url' => wp_nonce_url( admin_url( 'admin-ajax.php?action=dokan-mark-order-complete&order_id=' . dokan_get_prop( $the_order, 'id' ) ), 'dokan-mark-order-complete' ),
105
- 'name' => __( 'Complete', 'dokan-lite' ),
106
- 'action' => "complete",
107
- 'icon' => '<i class="fa fa-check">&nbsp;</i>'
108
- );
109
  }
110
 
111
- }
 
 
 
 
 
112
 
113
- $actions['view'] = array(
114
- 'url' => wp_nonce_url( add_query_arg( array( 'order_id' => dokan_get_prop( $the_order, 'id' ) ), dokan_get_navigation_url( 'orders' ) ), 'dokan_view_order' ),
115
- 'name' => __( 'View', 'dokan-lite' ),
116
- 'action' => "view",
117
- 'icon' => '<i class="fa fa-eye">&nbsp;</i>'
118
- );
119
 
120
- $actions = apply_filters( 'woocommerce_admin_order_actions', $actions, $the_order );
121
-
122
- foreach ($actions as $action) {
123
- $icon = ( isset( $action['icon'] ) ) ? $action['icon'] : '';
124
- printf( '<a class="dokan-btn dokan-btn-default dokan-btn-sm tips" href="%s" data-toggle="tooltip" data-placement="top" title="%s">%s</a> ', esc_url( $action['url'] ), esc_attr( $action['name'] ), $icon );
125
- }
126
 
127
- do_action( 'woocommerce_admin_order_actions_end', $the_order );
128
- ?>
129
- </td>
 
130
  <td class="diviader"></td>
131
  </tr>
132
 
@@ -149,7 +157,7 @@ if ( $user_orders ) {
149
  } else {
150
  $num_of_pages = ceil( $order_count / $limit );
151
  }
152
-
153
 
154
  $base_url = dokan_get_navigation_url( 'orders' );
155
 
1
  <?php
2
  global $woocommerce;
3
 
4
+ $seller_id = dokan_get_current_user_id();
5
  $order_status = isset( $_GET['order_status'] ) ? sanitize_key( $_GET['order_status'] ) : 'all';
6
  $paged = isset( $_GET['pagenum'] ) ? absint( $_GET['pagenum'] ) : 1;
7
  $limit = 10;
19
  <th><?php _e( 'Status', 'dokan-lite' ); ?></th>
20
  <th><?php _e( 'Customer', 'dokan-lite' ); ?></th>
21
  <th><?php _e( 'Date', 'dokan-lite' ); ?></th>
22
+ <?php if ( current_user_can( 'dokan_manage_order' ) ): ?>
23
+ <th width="17%"><?php _e( 'Action', 'dokan-lite' ); ?></th>
24
+ <?php endif ?>
25
  </tr>
26
  </thead>
27
  <tbody>
31
  ?>
32
  <tr >
33
  <td class="dokan-order-id" data-title="<?php _e( 'Order', 'dokan-lite' ); ?>" >
34
+ <?php if ( current_user_can( 'dokan_view_order' ) ): ?>
35
+ <?php echo '<a href="' . wp_nonce_url( add_query_arg( array( 'order_id' => dokan_get_prop( $the_order, 'id' ) ), dokan_get_navigation_url( 'orders' ) ), 'dokan_view_order' ) . '"><strong>' . sprintf( __( 'Order %s', 'dokan-lite' ), esc_attr( $the_order->get_order_number() ) ) . '</strong></a>'; ?>
36
+ <?php else: ?>
37
+ <?php echo '<strong>' . sprintf( __( 'Order %s', 'dokan-lite' ), esc_attr( $the_order->get_order_number() ) ) . '</strong>'; ?>
38
+ <?php endif ?>
39
  </td>
40
  <td class="dokan-order-total" data-title="<?php _e( 'Order Total', 'dokan-lite' ); ?>" >
41
  <?php echo $the_order->get_formatted_order_total(); ?>
42
  </td>
43
  <td class="dokan-order-status" data-title="<?php _e( 'Status', 'dokan-lite' ); ?>" >
44
+ <?php echo '<span class="dokan-label dokan-label-' . dokan_get_order_status_class( dokan_get_prop( $the_order, 'status' ) ) . '">' . dokan_get_order_status_translated( dokan_get_prop( $the_order, 'status' ) ) . '</span>'; ?>
45
  </td>
46
  <td class="dokan-order-customer" data-title="<?php _e( 'Customer', 'dokan-lite' ); ?>" >
47
  <?php
89
  echo '<abbr title="' . esc_attr( dokan_date_time_format( $t_time ) ) . '">' . esc_html( apply_filters( 'post_date_column_time', dokan_date_time_format( $h_time, true ) , dokan_get_prop( $the_order, 'id' ) ) ) . '</abbr>';
90
  ?>
91
  </td>
92
+ <?php if ( current_user_can( 'dokan_manage_order' ) ): ?>
93
+ <td class="dokan-order-action" width="17%" data-title="<?php _e( 'Action', 'dokan-lite' ); ?>" >
94
+ <?php
95
+ do_action( 'woocommerce_admin_order_actions_start', $the_order );
96
+
97
+ $actions = array();
98
+
99
+ if ( dokan_get_option( 'order_status_change', 'dokan_selling', 'on' ) == 'on' ) {
100
+ if ( in_array( dokan_get_prop( $the_order, 'status' ), array( 'pending', 'on-hold' ) ) ) {
101
+ $actions['processing'] = array(
102
+ 'url' => wp_nonce_url( admin_url( 'admin-ajax.php?action=dokan-mark-order-processing&order_id=' . dokan_get_prop( $the_order, 'id' ) ), 'dokan-mark-order-processing' ),
103
+ 'name' => __( 'Processing', 'dokan-lite' ),
104
+ 'action' => "processing",
105
+ 'icon' => '<i class="fa fa-clock-o">&nbsp;</i>'
106
+ );
107
+ }
108
+
109
+ if ( in_array( dokan_get_prop( $the_order, 'status' ), array( 'pending', 'on-hold', 'processing' ) ) ) {
110
+ $actions['complete'] = array(
111
+ 'url' => wp_nonce_url( admin_url( 'admin-ajax.php?action=dokan-mark-order-complete&order_id=' . dokan_get_prop( $the_order, 'id' ) ), 'dokan-mark-order-complete' ),
112
+ 'name' => __( 'Complete', 'dokan-lite' ),
113
+ 'action' => "complete",
114
+ 'icon' => '<i class="fa fa-check">&nbsp;</i>'
115
+ );
116
+ }
117
 
 
 
 
 
 
 
 
118
  }
119
 
120
+ $actions['view'] = array(
121
+ 'url' => wp_nonce_url( add_query_arg( array( 'order_id' => dokan_get_prop( $the_order, 'id' ) ), dokan_get_navigation_url( 'orders' ) ), 'dokan_view_order' ),
122
+ 'name' => __( 'View', 'dokan-lite' ),
123
+ 'action' => "view",
124
+ 'icon' => '<i class="fa fa-eye">&nbsp;</i>'
125
+ );
126
 
127
+ $actions = apply_filters( 'woocommerce_admin_order_actions', $actions, $the_order );
 
 
 
 
 
128
 
129
+ foreach ($actions as $action) {
130
+ $icon = ( isset( $action['icon'] ) ) ? $action['icon'] : '';
131
+ printf( '<a class="dokan-btn dokan-btn-default dokan-btn-sm tips" href="%s" data-toggle="tooltip" data-placement="top" title="%s">%s</a> ', esc_url( $action['url'] ), esc_attr( $action['name'] ), $icon );
132
+ }
 
 
133
 
134
+ do_action( 'woocommerce_admin_order_actions_end', $the_order );
135
+ ?>
136
+ </td>
137
+ <?php endif ?>
138
  <td class="diviader"></td>
139
  </tr>
140
 
157
  } else {
158
  $num_of_pages = ceil( $order_count / $limit );
159
  }
160
+
161
 
162
  $base_url = dokan_get_navigation_url( 'orders' );
163
 
templates/products/listing-filter.php CHANGED
@@ -13,7 +13,7 @@
13
  <form class="dokan-form-inline dokan-w6 dokan-product-date-filter" method="get" >
14
 
15
  <div class="dokan-form-group">
16
- <?php dokan_product_listing_filter_months_dropdown( get_current_user_id() ); ?>
17
  </div>
18
 
19
  <div class="dokan-form-group">
13
  <form class="dokan-form-inline dokan-w6 dokan-product-date-filter" method="get" >
14
 
15
  <div class="dokan-form-group">
16
+ <?php dokan_product_listing_filter_months_dropdown( dokan_get_current_user_id() ); ?>
17
  </div>
18
 
19
  <div class="dokan-form-group">
templates/products/new-product-single.php CHANGED
@@ -9,11 +9,6 @@ if ( !isset( $post->ID ) && ! isset( $_GET['product_id'] ) ) {
9
  }
10
 
11
  if( isset( $post->ID ) && $post->ID && $post->post_type == 'product' ) {
12
-
13
- if ( $post->post_author != get_current_user_id() ) {
14
- wp_die( __( 'Access Denied', 'dokan-lite' ) );
15
- }
16
-
17
  $post_id = $post->ID;
18
  $post_title = $post->post_title;
19
  $post_content = $post->post_content;
@@ -33,6 +28,11 @@ if ( isset( $_GET['product_id'] ) ) {
33
  $from_shortcode = true;
34
  }
35
 
 
 
 
 
 
36
  $_regular_price = get_post_meta( $post_id, '_regular_price', true );
37
  $_sale_price = get_post_meta( $post_id, '_sale_price', true );
38
  $is_discount = !empty( $_sale_price ) ? true : false;
@@ -236,7 +236,7 @@ if ( ! $from_shortcode ) {
236
  <div class="dokan-form-group dokan-clearfix dokan-price-container">
237
  <div class="dokan-product-less-price-alert dokan-hide">
238
  <?php _e('Product price can\'t be less than the vendor fee!', 'dokan-lite' ); ?>
239
- </div>
240
  </div>
241
 
242
  <div class="sale_price_dates_fields dokan-clearfix dokan-form-group <?php echo ( ! $show_schedule ) ? 'dokan-hide' : ''; ?>">
9
  }
10
 
11
  if( isset( $post->ID ) && $post->ID && $post->post_type == 'product' ) {
 
 
 
 
 
12
  $post_id = $post->ID;
13
  $post_title = $post->post_title;
14
  $post_content = $post->post_content;
28
  $from_shortcode = true;
29
  }
30
 
31
+ if ( ! dokan_is_product_author( $post_id ) ) {
32
+ wp_die( __( 'Access Denied', 'dokan-lite' ) );
33
+ exit();
34
+ }
35
+
36
  $_regular_price = get_post_meta( $post_id, '_regular_price', true );
37
  $_sale_price = get_post_meta( $post_id, '_sale_price', true );
38
  $is_discount = !empty( $_sale_price ) ? true : false;
236
  <div class="dokan-form-group dokan-clearfix dokan-price-container">
237
  <div class="dokan-product-less-price-alert dokan-hide">
238
  <?php _e('Product price can\'t be less than the vendor fee!', 'dokan-lite' ); ?>
239
+ </div>
240
  </div>
241
 
242
  <div class="sale_price_dates_fields dokan-clearfix dokan-form-group <?php echo ( ! $show_schedule ) ? 'dokan-hide' : ''; ?>">
templates/products/new-product.php CHANGED
@@ -105,8 +105,8 @@
105
  <div id="product_images_container">
106
  <ul class="product_images dokan-clearfix">
107
  <?php
108
- if ( isset( $_POST['product_image_gallery'] ) ) {
109
- $product_images = $_POST['product_image_gallery'];
110
  $gallery = explode( ',', $product_images );
111
 
112
  if ( $gallery ) {
105
  <div id="product_images_container">
106
  <ul class="product_images dokan-clearfix">
107
  <?php
108
+ if ( isset( $_POST['product_image_gallery'] ) ) { // WPCS: CSRF ok, input var ok.
109
+ $product_images = $_POST['product_image_gallery']; // WPCS: CSRF ok, input var ok.
110
  $gallery = explode( ',', $product_images );
111
 
112
  if ( $gallery ) {
templates/products/products-listing.php CHANGED
@@ -36,10 +36,16 @@
36
 
37
  <?php if ( dokan_is_seller_enabled( get_current_user_id() ) ): ?>
38
  <span class="dokan-add-product-link">
39
- <a href="<?php echo dokan_get_navigation_url( 'new-product' ); ?>" class="dokan-btn dokan-btn-theme dokan-right <?php echo ( 'on' == dokan_get_option( 'disable_product_popup', 'dokan_selling', 'off' ) ) ? '' : 'dokan-add-new-product'; ?>">
40
- <i class="fa fa-briefcase">&nbsp;</i>
41
- <?php _e( 'Add new product', 'dokan-lite' ); ?>
42
- </a>
 
 
 
 
 
 
43
  </span>
44
  <?php endif; ?>
45
  </div>
@@ -68,12 +74,20 @@
68
  </thead>
69
  <tbody>
70
  <?php
71
- $pagenum = isset( $_GET['pagenum'] ) ? absint( $_GET['pagenum'] ) : 1;
72
-
73
  $args = array(
74
  'posts_per_page' => 10,
75
- 'paged' => $pagenum,
76
- 'author' => get_current_user_id()
 
 
 
 
 
 
 
 
77
  );
78
 
79
  if ( isset( $_GET['post_status']) && in_array( $_GET['post_status'], $post_statuses ) ) {
@@ -98,29 +112,37 @@
98
  }
99
 
100
  $original_post = $post;
101
- $product_query = dokan()->product->all( $args );
102
 
103
  if ( $product_query->have_posts() ) {
104
  while ($product_query->have_posts()) {
105
  $product_query->the_post();
106
 
 
107
  $tr_class = ($post->post_status == 'pending' ) ? ' class="danger"' : '';
108
  $view_class = ($post->post_status == 'pending' ) ? 'dokan-hide' : '';
109
  $product = wc_get_product( $post->ID );
110
  ?>
111
  <tr<?php echo $tr_class; ?>>
112
  <td data-title="<?php _e( 'Image', 'dokan-lite' ); ?>">
113
- <a href="<?php echo dokan_edit_product_url( $post->ID ); ?>"><?php echo $product->get_image(); ?></a>
 
 
 
 
114
  </td>
115
  <td data-title="<?php _e( 'Name', 'dokan-lite' ); ?>">
116
- <p><a href="<?php echo dokan_edit_product_url( $post->ID ); ?>"><?php echo $product->get_title(); ?></a></p>
117
-
118
- <div class="row-actions">
119
- <span class="edit"><a href="<?php echo dokan_edit_product_url( $post->ID ); ?>"><?php _e( 'Edit', 'dokan-lite' ); ?></a> | </span>
120
- <span class="delete"><a onclick="return confirm('Are you sure?');" href="<?php echo wp_nonce_url( add_query_arg( array( 'action' => 'dokan-delete-product', 'product_id' => $post->ID ), dokan_get_navigation_url('products') ), 'dokan-delete-product' ); ?>"><?php _e( 'Delete Permanently', 'dokan-lite' ); ?></a> </span>
121
- <span class="view <?php echo $view_class ?>"> | <a href="<?php echo get_permalink( dokan_get_prop( $product, 'id' ) ); ?>" rel="permalink"><?php _e( 'View', 'dokan-lite' ); ?></a></span>
122
- <?php do_action( 'dokan_product_listin_row_action', $product ); ?>
123
- </div>
 
 
 
124
  </td>
125
  <td class="post-status" data-title="<?php _e( 'Status', 'dokan-lite' ); ?>">
126
  <label class="dokan-label <?php echo dokan_get_post_status_label_class( $post->post_status ); ?>"><?php echo dokan_get_post_status( $post->post_status ); ?></label>
36
 
37
  <?php if ( dokan_is_seller_enabled( get_current_user_id() ) ): ?>
38
  <span class="dokan-add-product-link">
39
+ <?php if ( current_user_can( 'dokan_add_product' ) ): ?>
40
+ <a href="<?php echo dokan_get_navigation_url( 'new-product' ); ?>" class="dokan-btn dokan-btn-theme <?php echo ( 'on' == dokan_get_option( 'disable_product_popup', 'dokan_selling', 'off' ) ) ? '' : 'dokan-add-new-product'; ?>">
41
+ <i class="fa fa-briefcase">&nbsp;</i>
42
+ <?php _e( 'Add new product', 'dokan-lite' ); ?>
43
+ </a>
44
+ <?php endif ?>
45
+
46
+ <?php
47
+ do_action( 'dokan_after_add_product_btn' );
48
+ ?>
49
  </span>
50
  <?php endif; ?>
51
  </div>
74
  </thead>
75
  <tbody>
76
  <?php
77
+ $pagenum = isset( $_GET['pagenum'] ) ? absint( $_GET['pagenum'] ) : 1;
78
+ $post_statuses = array( 'publish', 'draft', 'pending' );
79
  $args = array(
80
  'posts_per_page' => 10,
81
+ 'paged' => $pagenum,
82
+ 'author' => get_current_user_id(),
83
+ 'tax_query' => array(
84
+ array(
85
+ 'taxonomy' => 'product_type',
86
+ 'field' => 'slug',
87
+ 'terms' => apply_filters( 'dokan_product_listing_exclude_type', array() ),
88
+ 'operator' => 'NOT IN',
89
+ ),
90
+ ),
91
  );
92
 
93
  if ( isset( $_GET['post_status']) && in_array( $_GET['post_status'], $post_statuses ) ) {
112
  }
113
 
114
  $original_post = $post;
115
+ $product_query = dokan()->product->all( apply_filters( 'dokan_product_listing_arg', $args ) );
116
 
117
  if ( $product_query->have_posts() ) {
118
  while ($product_query->have_posts()) {
119
  $product_query->the_post();
120
 
121
+ $row_actions = dokan_product_get_row_action( $post );
122
  $tr_class = ($post->post_status == 'pending' ) ? ' class="danger"' : '';
123
  $view_class = ($post->post_status == 'pending' ) ? 'dokan-hide' : '';
124
  $product = wc_get_product( $post->ID );
125
  ?>
126
  <tr<?php echo $tr_class; ?>>
127
  <td data-title="<?php _e( 'Image', 'dokan-lite' ); ?>">
128
+ <?php if ( current_user_can( 'dokan_edit_product' ) ): ?>
129
+ <a href="<?php echo dokan_edit_product_url( $post->ID ); ?>"><?php echo $product->get_image(); ?></a>
130
+ <?php else: ?>
131
+ <?php echo $product->get_image(); ?>
132
+ <?php endif ?>
133
  </td>
134
  <td data-title="<?php _e( 'Name', 'dokan-lite' ); ?>">
135
+ <?php if ( current_user_can( 'dokan_edit_product' ) ): ?>
136
+ <p><a href="<?php echo dokan_edit_product_url( $post->ID ); ?>"><?php echo $product->get_title(); ?></a></p>
137
+ <?php else: ?>
138
+ <p><a href=""><?php echo $product->get_title(); ?></a></p>
139
+ <?php endif ?>
140
+
141
+ <?php if ( !empty( $row_actions ) ): ?>
142
+ <div class="row-actions">
143
+ <?php echo $row_actions; ?>
144
+ </div>
145
+ <?php endif ?>
146
  </td>
147
  <td class="post-status" data-title="<?php _e( 'Status', 'dokan-lite' ); ?>">
148
  <label class="dokan-label <?php echo dokan_get_post_status_label_class( $post->post_status ); ?>"><?php echo dokan_get_post_status( $post->post_status ); ?></label>
templates/settings/header.php CHANGED
@@ -10,6 +10,6 @@
10
  <header class="dokan-dashboard-header">
11
  <h1 class="entry-title">
12
  <?php echo $heading; ?>
13
- <small>&rarr; <a href="<?php echo dokan_get_store_url( get_current_user_id() ); ?>"><?php _e( 'Visit Store', 'dokan-lite' ); ?></a></small>
14
  </h1>
15
  </header><!-- .dokan-dashboard-header -->
10
  <header class="dokan-dashboard-header">
11
  <h1 class="entry-title">
12
  <?php echo $heading; ?>
13
+ <small>&rarr; <a href="<?php echo dokan_get_store_url( dokan_get_current_user_id() ); ?>"><?php _e( 'Visit Store', 'dokan-lite' ); ?></a></small>
14
  </h1>
15
  </header><!-- .dokan-dashboard-header -->
templates/settings/store-form.php CHANGED
@@ -30,16 +30,18 @@
30
  $store_tnc = isset( $profile_info['store_tnc'] ) ? $profile_info['store_tnc'] : '' ;
31
 
32
  if ( is_wp_error( $validate ) ) {
33
- $storename = $_POST['dokan_store_name'];
34
- $map_location = $_POST['location'];
35
- $map_address = $_POST['find_address'];
36
-
37
- $address_street1 = $_POST['dokan_address']['street_1'];
38
- $address_street2 = $_POST['dokan_address']['street_2'];
39
- $address_city = $_POST['dokan_address']['city'];
40
- $address_zip = $_POST['dokan_address']['zip'];
41
- $address_country = $_POST['dokan_address']['country'];
42
- $address_state = $_POST['dokan_address']['state'];
 
 
43
  }
44
 
45
  $dokan_appearance = dokan_get_option( 'store_header_template', 'dokan_appearance', 'default' );
30
  $store_tnc = isset( $profile_info['store_tnc'] ) ? $profile_info['store_tnc'] : '' ;
31
 
32
  if ( is_wp_error( $validate ) ) {
33
+ $storename = $_POST['dokan_store_name']; // WPCS: CSRF ok, Input var ok.
34
+ $map_location = $_POST['location']; // WPCS: CSRF ok, Input var ok.
35
+ $map_address = $_POST['find_address']; // WPCS: CSRF ok, Input var ok.
36
+
37
+ $posted_address = wc_clean( $_POST['dokan_address'] ); // WPCS: CSRF ok, Input var ok.
38
+
39
+ $address_street1 = $posted_address['street_1'];
40
+ $address_street2 = $posted_address['street_2'];
41
+ $address_city = $posted_address['city'];
42
+ $address_zip = $posted_address['zip'];
43
+ $address_country = $posted_address['country'];
44
+ $address_state = $posted_address['state'];
45
  }
46
 
47
  $dokan_appearance = dokan_get_option( 'store_header_template', 'dokan_appearance', 'default' );
templates/store-header.php CHANGED
@@ -83,6 +83,8 @@ if ( 'layout3' === $profile_layout ) {
83
  <i class="fa fa-star"></i>
84
  <?php dokan_get_readable_seller_rating( $store_user->get_id() ); ?>
85
  </li>
 
 
86
  </ul>
87
 
88
  <?php if ( $social_fields ) { ?>
83
  <i class="fa fa-star"></i>
84
  <?php dokan_get_readable_seller_rating( $store_user->get_id() ); ?>
85
  </li>
86
+
87
+ <?php do_action( 'dokan_store_header_info_fields', $store_user->get_id() ); ?>
88
  </ul>
89
 
90
  <?php if ( $social_fields ) { ?>
templates/store.php CHANGED
@@ -22,7 +22,6 @@ get_header( 'shop' );
22
  <?php do_action( 'dokan_sidebar_store_before', $store_user->data, $store_info ); ?>
23
  <?php
24
  if ( ! dynamic_sidebar( 'sidebar-store' ) ) {
25
-
26
  $args = array(
27
  'before_widget' => '<aside class="widget">',
28
  'after_widget' => '</aside>',
22
  <?php do_action( 'dokan_sidebar_store_before', $store_user->data, $store_info ); ?>
23
  <?php
24
  if ( ! dynamic_sidebar( 'sidebar-store' ) ) {
 
25
  $args = array(
26
  'before_widget' => '<aside class="widget">',
27
  'after_widget' => '</aside>',
templates/withdraw/request-form.php CHANGED
@@ -7,7 +7,10 @@
7
  * @package dokan
8
  */
9
  ?>
 
10
  <form class="dokan-form-horizontal withdraw" role="form" method="post">
 
 
11
  <div class="dokan-form-group">
12
  <label for="withdraw-amount" class="dokan-w3 dokan-control-label">
13
  <?php _e( 'Withdraw Amount', 'dokan-lite' ); ?>
@@ -42,3 +45,8 @@
42
  </div>
43
  </div>
44
  </form>
 
 
 
 
 
7
  * @package dokan
8
  */
9
  ?>
10
+ <?php if ( ! empty( $payment_methods ) ) : ?>
11
  <form class="dokan-form-horizontal withdraw" role="form" method="post">
12
+ <?php wp_nonce_field( 'dokan_withdraw', 'dokan_withdraw_nonce' ); ?>
13
+
14
  <div class="dokan-form-group">
15
  <label for="withdraw-amount" class="dokan-w3 dokan-control-label">
16
  <?php _e( 'Withdraw Amount', 'dokan-lite' ); ?>
45
  </div>
46
  </div>
47
  </form>
48
+ <?php else : ?>
49
+ <div class="dokan-alert dokan-alert-warning">
50
+ <strong><?php echo sprintf( '%s <a href="%s">%s</a>', __( 'No withdraw method is available. Please update your payment method to withdraw funds.', 'dokan-lite' ), esc_url( dokan_get_navigation_url( 'settings/payment' ) ), __( 'Payment Settings Setup', 'dokan-lite' ) ) ?></strong>
51
+ </div>
52
+ <?php endif; ?>