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

Version Description

Download this release

Release Info

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

Code changes from version 3.3.8 to 3.3.9

assets/css/style.css CHANGED
@@ -3766,6 +3766,65 @@ div.media-sidebar a.edit-attachment {
3766
  .select2-container--open .select2-dropdown--below {
3767
  margin-top: 5px !important;
3768
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3769
  .dokan-settings-content .dokan-settings-area {
3770
  position: relative;
3771
  }
@@ -4129,14 +4188,21 @@ div.media-sidebar a.edit-attachment {
4129
  font-weight: bold;
4130
  padding: 0;
4131
  font-size: 20px;
4132
- text-align: center;
4133
  margin: 0 0 18px;
4134
  color: #fff;
 
 
 
 
 
 
4135
  }
4136
  .dokan-single-store .profile-frame .profile-info-box .profile-info-summery-wrapper .profile-info-summery .profile-info {
4137
  padding: 0 30px;
4138
  }
4139
  .dokan-single-store .profile-frame .profile-info-box .profile-info-summery-wrapper .profile-info-summery .profile-info .dokan-store-info {
 
 
4140
  list-style: none;
4141
  }
4142
  .dokan-single-store .profile-frame .profile-info-box .profile-info-summery-wrapper .profile-info-summery .profile-info .dokan-store-info .dokan-store-phone a,
@@ -4144,6 +4210,122 @@ div.media-sidebar a.edit-attachment {
4144
  text-decoration: none;
4145
  color: inherit;
4146
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4147
  .dokan-single-store .profile-frame .profile-info-box .profile-info-summery-wrapper .profile-info-summery .profile-info li {
4148
  padding-bottom: 8px;
4149
  }
@@ -4720,6 +4902,15 @@ div.media-sidebar a.edit-attachment {
4720
  .dokan-single-store .profile-frame .profile-info-box .profile-info-summery-wrapper .profile-info-summery .profile-info .dokan-store-info li i {
4721
  display: none;
4722
  }
 
 
 
 
 
 
 
 
 
4723
  .dokan-single-store .profile-frame .profile-info-box .profile-info-summery-wrapper .profile-info-summery .profile-info .store-social-wrapper {
4724
  position: relative;
4725
  top: -45px;
3766
  .select2-container--open .select2-dropdown--below {
3767
  margin-top: 5px !important;
3768
  }
3769
+ .dokan-vendor-info-wrap {
3770
+ border: 1px solid #E7E7E7;
3771
+ padding: 15px;
3772
+ display: flex;
3773
+ align-items: center;
3774
+ margin-top: 10px;
3775
+ }
3776
+ .dokan-vendor-info-wrap h5,
3777
+ .dokan-vendor-info-wrap p {
3778
+ margin: 0;
3779
+ }
3780
+ .dokan-vendor-info-wrap a {
3781
+ text-decoration: none!important;
3782
+ background: transparent!important;
3783
+ box-shadow: unset!important;
3784
+ padding: 0!important;
3785
+ }
3786
+ .dokan-vendor-info-wrap .dokan-vendor-image {
3787
+ width: 50px;
3788
+ height: 50px;
3789
+ margin-right: 13px;
3790
+ }
3791
+ .dokan-vendor-info-wrap .dokan-vendor-image img {
3792
+ border-radius: 50%;
3793
+ }
3794
+ .dokan-vendor-info-wrap .dokan-vendor-info .dokan-vendor-name {
3795
+ display: flex;
3796
+ align-items: center;
3797
+ }
3798
+ .dokan-vendor-info-wrap .dokan-vendor-info .dokan-vendor-name h5 {
3799
+ font-size: 16px;
3800
+ font-weight: 500;
3801
+ color: #000;
3802
+ margin-right: 10px;
3803
+ }
3804
+ .dokan-vendor-info-wrap .dokan-vendor-info .dokan-vendor-rating {
3805
+ display: flex;
3806
+ align-items: center;
3807
+ }
3808
+ .dokan-vendor-info-wrap .dokan-vendor-info .dokan-vendor-rating p {
3809
+ color: #C1C1C1;
3810
+ font-size: 14px;
3811
+ font-weight: 500;
3812
+ margin-right: 6px;
3813
+ }
3814
+ .dokan-vendor-info-wrap .dokan-vendor-info .dokan-vendor-rating .dashicons-star-empty {
3815
+ color: #e0e0e0;
3816
+ font-size: 16px;
3817
+ }
3818
+ .dokan-vendor-info-wrap .dokan-vendor-info .dokan-vendor-rating .dashicons-star-filled,
3819
+ .dokan-vendor-info-wrap .dokan-vendor-info .dokan-vendor-rating .dashicons-star-half {
3820
+ color: #ffc239;
3821
+ font-size: 16px;
3822
+ }
3823
+ .dokan-vendor-info-wrap .dokan-vendor-info .dokan-ratings-count {
3824
+ color: #C1C1C1;
3825
+ font-size: 11px;
3826
+ font-weight: normal;
3827
+ }
3828
  .dokan-settings-content .dokan-settings-area {
3829
  position: relative;
3830
  }
4188
  font-weight: bold;
4189
  padding: 0;
4190
  font-size: 20px;
 
4191
  margin: 0 0 18px;
4192
  color: #fff;
4193
+ display: flex;
4194
+ align-items: center;
4195
+ justify-content: center;
4196
+ }
4197
+ .dokan-single-store .profile-frame .profile-info-box .profile-info-summery-wrapper .profile-info-summery .profile-info-head .store-name svg {
4198
+ margin-left: 5px;
4199
  }
4200
  .dokan-single-store .profile-frame .profile-info-box .profile-info-summery-wrapper .profile-info-summery .profile-info {
4201
  padding: 0 30px;
4202
  }
4203
  .dokan-single-store .profile-frame .profile-info-box .profile-info-summery-wrapper .profile-info-summery .profile-info .dokan-store-info {
4204
+ cursor: pointer;
4205
+ position: relative;
4206
  list-style: none;
4207
  }
4208
  .dokan-single-store .profile-frame .profile-info-box .profile-info-summery-wrapper .profile-info-summery .profile-info .dokan-store-info .dokan-store-phone a,
4210
  text-decoration: none;
4211
  color: inherit;
4212
  }
4213
+ .dokan-single-store .profile-frame .profile-info-box .profile-info-summery-wrapper .profile-info-summery .profile-info .dokan-store-info span.fa-angle-down {
4214
+ margin-left: 10px;
4215
+ }
4216
+ .dokan-single-store .profile-frame .profile-info-box .profile-info-summery-wrapper .profile-info-summery .profile-info .dokan-store-info .dokan-store-open-close .store-open-close-notice {
4217
+ display: flex;
4218
+ align-items: center;
4219
+ position: relative;
4220
+ }
4221
+ .dokan-single-store .profile-frame .profile-info-box .profile-info-summery-wrapper .profile-info-summery .profile-info .dokan-store-info .dokan-store-open-close .store-open-close-notice .store-notice {
4222
+ min-width: 96px;
4223
+ }
4224
+ .dokan-single-store .profile-frame .profile-info-box .profile-info-summery-wrapper .profile-info-summery .profile-info .dokan-store-info .dokan-store-open-close .store-open-close-notice #vendor-store-times {
4225
+ top: 110%;
4226
+ left: -20%;
4227
+ color: #3E474F;
4228
+ width: 300px;
4229
+ z-index: 1;
4230
+ display: none;
4231
+ padding: 1.5em 2em;
4232
+ overflow: auto;
4233
+ position: absolute;
4234
+ max-height: 435px;
4235
+ background: #fff;
4236
+ box-shadow: 0 10px 15px -3px #00000040, 0 4px 6px -4px #00000010;
4237
+ border-radius: 6px;
4238
+ }
4239
+ .dokan-single-store .profile-frame .profile-info-box .profile-info-summery-wrapper .profile-info-summery .profile-info .dokan-store-info .dokan-store-open-close .store-open-close-notice #vendor-store-times .store-times-heading {
4240
+ margin: 10px 0 25px;
4241
+ display: flex;
4242
+ align-items: center;
4243
+ justify-content: center;
4244
+ }
4245
+ .dokan-single-store .profile-frame .profile-info-box .profile-info-summery-wrapper .profile-info-summery .profile-info .dokan-store-info .dokan-store-open-close .store-open-close-notice #vendor-store-times .store-times-heading i.fa-calendar-day {
4246
+ color: #2471A9;
4247
+ width: 30px;
4248
+ margin: 0 10px 0 -10px;
4249
+ height: 30px;
4250
+ border: 1px solid #CBD9DC;
4251
+ display: flex;
4252
+ align-items: center;
4253
+ border-radius: 50%;
4254
+ justify-content: center;
4255
+ }
4256
+ .dokan-single-store .profile-frame .profile-info-box .profile-info-summery-wrapper .profile-info-summery .profile-info .dokan-store-info .dokan-store-open-close .store-open-close-notice #vendor-store-times .store-times-heading h4 {
4257
+ font-size: 20px;
4258
+ font-weight: 700;
4259
+ margin-bottom: 0;
4260
+ }
4261
+ .dokan-single-store .profile-frame .profile-info-box .profile-info-summery-wrapper .profile-info-summery .profile-info .dokan-store-info .dokan-store-open-close .store-open-close-notice #vendor-store-times span {
4262
+ margin-left: 10px;
4263
+ }
4264
+ .dokan-single-store .profile-frame .profile-info-box .profile-info-summery-wrapper .profile-info-summery .profile-info .dokan-store-info .dokan-store-open-close .store-open-close-notice #vendor-store-times .store-time-tags {
4265
+ display: flex;
4266
+ font-size: 15px;
4267
+ margin-bottom: 12px;
4268
+ }
4269
+ .dokan-single-store .profile-frame .profile-info-box .profile-info-summery-wrapper .profile-info-summery .profile-info .dokan-store-info .dokan-store-open-close .store-open-close-notice #vendor-store-times .store-time-tags .store-days {
4270
+ flex: 2.4;
4271
+ }
4272
+ .dokan-single-store .profile-frame .profile-info-box .profile-info-summery-wrapper .profile-info-summery .profile-info .dokan-store-info .dokan-store-open-close .store-open-close-notice #vendor-store-times .store-time-tags .current_day,
4273
+ .dokan-single-store .profile-frame .profile-info-box .profile-info-summery-wrapper .profile-info-summery .profile-info .dokan-store-info .dokan-store-open-close .store-open-close-notice #vendor-store-times .store-time-tags .current_time {
4274
+ font-weight: 700;
4275
+ }
4276
+ .dokan-single-store .profile-frame .profile-info-box .profile-info-summery-wrapper .profile-info-summery .profile-info .dokan-store-info .dokan-store-open-close .store-open-close-notice #vendor-store-times .store-time-tags .store-times {
4277
+ flex: 4;
4278
+ }
4279
+ .dokan-single-store .profile-frame .profile-info-box .profile-info-summery-wrapper .profile-info-summery .profile-info .dokan-store-info .dokan-store-open-close .store-open-close-notice #vendor-store-times .store-time-tags .store-times .store-open,
4280
+ .dokan-single-store .profile-frame .profile-info-box .profile-info-summery-wrapper .profile-info-summery .profile-info .dokan-store-info .dokan-store-open-close .store-open-close-notice #vendor-store-times .store-time-tags .store-times .store-close {
4281
+ cursor: pointer;
4282
+ display: inline-block;
4283
+ padding: 2px 3px 3.5px;
4284
+ transition: 0.5s ease;
4285
+ list-style: none;
4286
+ margin-bottom: 5.5px;
4287
+ border-radius: 0.375rem;
4288
+ text-decoration: none;
4289
+ }
4290
+ .dokan-single-store .profile-frame .profile-info-box .profile-info-summery-wrapper .profile-info-summery .profile-info .dokan-store-info .dokan-store-open-close .store-open-close-notice #vendor-store-times .store-time-tags .store-times .store-close {
4291
+ color: #D07272;
4292
+ padding: 1px 12px;
4293
+ border-radius: 16px;
4294
+ background-color: #F8E8E7;
4295
+ max-width: 75px;
4296
+ text-align: center;
4297
+ }
4298
+ .dokan-single-store .profile-frame .profile-info-box .profile-info-summery-wrapper .profile-info-summery .profile-info .dokan-store-info .dokan-store-open-close .store-open-close-notice #vendor-store-times .store-time-tags:last-child {
4299
+ margin-bottom: 0;
4300
+ }
4301
+ .dokan-single-store .profile-frame .profile-info-box .profile-info-summery-wrapper .profile-info-summery .profile-info .dokan-store-info .dokan-store-open-close .store-open-close-notice #vendor-store-times::-webkit-scrollbar {
4302
+ width: 10px;
4303
+ }
4304
+ .dokan-single-store .profile-frame .profile-info-box .profile-info-summery-wrapper .profile-info-summery .profile-info .dokan-store-info .dokan-store-open-close .store-open-close-notice #vendor-store-times::-webkit-scrollbar-thumb {
4305
+ background: #8d9399;
4306
+ border-radius: 5px;
4307
+ }
4308
+ .dokan-single-store .profile-frame .profile-info-box .profile-info-summery-wrapper .profile-info-summery .profile-info .dokan-store-info .dokan-store-open-close .store-open-close-notice #vendor-store-times::-webkit-scrollbar-thumb:hover {
4309
+ background: #555;
4310
+ }
4311
+ .dokan-single-store .profile-frame .profile-info-box .profile-info-summery-wrapper .profile-info-summery .profile-info .dokan-store-info .dokan-store-open-close .store-open-close-notice #vendor-store-times:hover {
4312
+ display: block;
4313
+ }
4314
+ .dokan-single-store .profile-frame .profile-info-box .profile-info-summery-wrapper .profile-info-summery .profile-info .dokan-store-info .dokan-store-open-close .store-open-close-notice:hover #vendor-store-times {
4315
+ display: block;
4316
+ }
4317
+ .dokan-single-store .profile-frame .profile-info-box .profile-info-summery-wrapper .profile-info-summery .profile-info .dokan-store-info .dokan-store-open-close .store-open-close-notice:hover span.fa-angle-down:after {
4318
+ content: "";
4319
+ top: 75%;
4320
+ right: 44.5%;
4321
+ width: 25px;
4322
+ height: 40px;
4323
+ z-index: 1;
4324
+ position: absolute;
4325
+ transform: rotate(45deg);
4326
+ border-radius: 5px;
4327
+ background-color: #fff;
4328
+ }
4329
  .dokan-single-store .profile-frame .profile-info-box .profile-info-summery-wrapper .profile-info-summery .profile-info li {
4330
  padding-bottom: 8px;
4331
  }
4902
  .dokan-single-store .profile-frame .profile-info-box .profile-info-summery-wrapper .profile-info-summery .profile-info .dokan-store-info li i {
4903
  display: none;
4904
  }
4905
+ .dokan-single-store .profile-frame .profile-info-box .profile-info-summery-wrapper .profile-info-summery .profile-info .dokan-store-info li span.fa-angle-down {
4906
+ display: none;
4907
+ }
4908
+ .dokan-single-store .profile-frame .profile-info-box .profile-info-summery-wrapper .profile-info-summery .profile-info .dokan-store-info li .dokan-times {
4909
+ margin-left: 5px;
4910
+ }
4911
+ .dokan-single-store .profile-frame .profile-info-box .profile-info-summery-wrapper .profile-info-summery .profile-info .dokan-store-info li .store-open-close-notice {
4912
+ justify-content: center;
4913
+ }
4914
  .dokan-single-store .profile-frame .profile-info-box .profile-info-summery-wrapper .profile-info-summery .profile-info .store-social-wrapper {
4915
  position: relative;
4916
  top: -45px;
assets/js/dokan.js CHANGED
@@ -2250,6 +2250,10 @@ jQuery(function($) {
2250
  );
2251
 
2252
  $('.dokan-ajax-response').append(resp.data.progress);
 
 
 
 
2253
  } else {
2254
  $('.dokan-ajax-response').html(
2255
  $('<div/>', {
2250
  );
2251
 
2252
  $('.dokan-ajax-response').append(resp.data.progress);
2253
+
2254
+ if ( dokan && dokan.storeProgressBar ) {
2255
+ dokan.storeProgressBar.init();
2256
+ }
2257
  } else {
2258
  $('.dokan-ajax-response').html(
2259
  $('<div/>', {
dokan.php CHANGED
@@ -3,12 +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: 3.3.8
7
  * Author: weDevs
8
  * Author URI: https://wedevs.com/
9
  * Text Domain: dokan-lite
10
  * WC requires at least: 3.0
11
- * WC tested up to: 6.2.0
12
  * Domain Path: /languages/
13
  * License: GPL2
14
  */
@@ -56,7 +56,7 @@ final class WeDevs_Dokan {
56
  *
57
  * @var string
58
  */
59
- public $version = '3.3.8';
60
 
61
  /**
62
  * Instance of self
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: 3.3.9
7
  * Author: weDevs
8
  * Author URI: https://wedevs.com/
9
  * Text Domain: dokan-lite
10
  * WC requires at least: 3.0
11
+ * WC tested up to: 6.2.1
12
  * Domain Path: /languages/
13
  * License: GPL2
14
  */
56
  *
57
  * @var string
58
  */
59
+ public $version = '3.3.9';
60
 
61
  /**
62
  * Instance of self
includes/Customizer.php CHANGED
@@ -388,6 +388,39 @@ class Customizer {
388
  ]
389
  );
390
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
391
  /*
392
  * Do selective refresh based on the jQuery selectors
393
  */
388
  ]
389
  );
390
 
391
+ // ( Customizing->Dokan->Store List ) section
392
+ $wp_customize->add_section(
393
+ 'dokan_store_list',
394
+ [
395
+ 'title' => __( 'Store List', 'dokan-lite' ),
396
+ 'priority' => 9,
397
+ 'panel' => 'dokan',
398
+ ]
399
+ );
400
+
401
+ $wp_customize->add_setting(
402
+ 'dokan_appearance[store_list_sort_by]',
403
+ [
404
+ 'default' => 'most_recent',
405
+ 'type' => 'option',
406
+ 'capability' => $this->capability,
407
+ 'sanitize_callback' => 'sanitize_text_field',
408
+ 'sanitize_js_callback' => 'sanitize_text_field',
409
+ ]
410
+ );
411
+
412
+ $wp_customize->add_control(
413
+ 'store_list_sort_by',
414
+ [
415
+ 'type' => 'select',
416
+ 'section' => 'dokan_store_list',
417
+ 'settings' => 'dokan_appearance[store_list_sort_by]',
418
+ 'label' => __( 'Store List Sorting', 'dokan-lite' ),
419
+ 'description' => __( 'How should stores be sorted by default?', 'dokan-lite' ),
420
+ 'choices' => \WeDevs\Dokan\Vendor\StoreListsFilter::sort_by_options(),
421
+ ]
422
+ );
423
+
424
  /*
425
  * Do selective refresh based on the jQuery selectors
426
  */
includes/Dashboard/Templates/Products.php CHANGED
@@ -268,13 +268,16 @@ class Products {
268
  self::$errors = apply_filters( 'dokan_can_add_product', $errors );
269
 
270
  if ( ! self::$errors ) {
 
271
  $product_status = dokan_get_new_post_status();
272
- $post_data = apply_filters( 'dokan_insert_product_post_data', array(
273
- 'post_type' => 'product',
274
- 'post_status' => $product_status,
275
- 'post_title' => $post_title,
276
- 'post_content' => $post_content,
277
- 'post_excerpt' => $post_excerpt,
 
 
278
  ) );
279
 
280
  $product_id = wp_insert_post( $post_data );
268
  self::$errors = apply_filters( 'dokan_can_add_product', $errors );
269
 
270
  if ( ! self::$errors ) {
271
+ $timenow = dokan_current_datetime()->setTimezone( new \DateTimeZone( 'UTC' ) );
272
  $product_status = dokan_get_new_post_status();
273
+ $post_data = apply_filters( 'dokan_insert_product_post_data', array(
274
+ 'post_type' => 'product',
275
+ 'post_status' => $product_status,
276
+ 'post_title' => $post_title,
277
+ 'post_content' => $post_content,
278
+ 'post_excerpt' => $post_excerpt,
279
+ 'post_date_gmt' => $timenow->format( 'Y-m-d H:i:s' ),
280
+ 'post_modified_gmt' => $timenow->format( 'Y-m-d H:i:s' ),
281
  ) );
282
 
283
  $product_id = wp_insert_post( $post_data );
includes/Order/Hooks.php CHANGED
@@ -37,7 +37,7 @@ class Hooks {
37
  add_action( 'dokan_checkout_update_order_meta', 'dokan_sync_insert_order' );
38
 
39
  // prevent non-vendor coupons from being added
40
- add_filter( 'woocommerce_coupon_is_valid', [ $this, 'ensure_vendor_coupon' ], 10, 2 );
41
 
42
  if ( is_admin() ) {
43
  add_action( 'woocommerce_process_shop_order_meta', 'dokan_sync_insert_order' );
@@ -327,21 +327,29 @@ class Hooks {
327
  *
328
  * @param boolean $valid
329
  * @param \WC_Coupon $coupon
 
330
  *
331
- * @return boolean|Execption
332
  * @throws Exception
333
  */
334
- public function ensure_vendor_coupon( $valid, $coupon ) {
335
  $available_vendors = [];
336
  $available_products = [];
337
 
338
- foreach ( WC()->cart->get_cart() as $item ) {
339
- $product_id = $item['data']->get_id();
340
-
341
- $available_vendors[] = (int) get_post_field( 'post_author', $product_id );
342
- $available_products[] = $product_id;
 
 
 
 
 
 
343
  }
344
 
 
345
  $available_vendors = array_unique( $available_vendors );
346
 
347
  if ( $coupon->is_type( 'fixed_cart' ) && count( $available_vendors ) > 1 ) {
37
  add_action( 'dokan_checkout_update_order_meta', 'dokan_sync_insert_order' );
38
 
39
  // prevent non-vendor coupons from being added
40
+ add_filter( 'woocommerce_coupon_is_valid', [ $this, 'ensure_vendor_coupon' ], 10, 3 );
41
 
42
  if ( is_admin() ) {
43
  add_action( 'woocommerce_process_shop_order_meta', 'dokan_sync_insert_order' );
327
  *
328
  * @param boolean $valid
329
  * @param \WC_Coupon $coupon
330
+ * @param \WC_Discounts $discount
331
  *
332
+ * @return boolean|Exception
333
  * @throws Exception
334
  */
335
+ public function ensure_vendor_coupon( $valid, $coupon, $discount ) {
336
  $available_vendors = [];
337
  $available_products = [];
338
 
339
+ if ( WC()->cart ) {
340
+ foreach ( WC()->cart->get_cart() as $item ) {
341
+ $product_id = $item['data']->get_id();
342
+ $available_vendors[] = (int) get_post_field( 'post_author', $product_id );
343
+ $available_products[] = $product_id;
344
+ }
345
+ } else {
346
+ foreach ( $discount->get_items() as $item_id => $item ) {
347
+ $available_vendors[] = (int) get_post_field( 'post_author', $item_id );
348
+ $available_products[] = $item_id;
349
+ }
350
  }
351
 
352
+
353
  $available_vendors = array_unique( $available_vendors );
354
 
355
  if ( $coupon->is_type( 'fixed_cart' ) && count( $available_vendors ) > 1 ) {
includes/Product/Hooks.php CHANGED
@@ -24,6 +24,7 @@ class Hooks {
24
  add_action( 'wp_ajax_nopriv_dokan_store_product_search_action', [ $this, 'store_product_search_action' ], 10, 2 );
25
 
26
  // Init Product Cache Class
 
27
  new ProductCache();
28
  }
29
 
24
  add_action( 'wp_ajax_nopriv_dokan_store_product_search_action', [ $this, 'store_product_search_action' ], 10, 2 );
25
 
26
  // Init Product Cache Class
27
+ new VendorStoreInfo();
28
  new ProductCache();
29
  }
30
 
includes/Product/VendorStoreInfo.php ADDED
@@ -0,0 +1,79 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace WeDevs\Dokan\Product;
4
+
5
+ /**
6
+ * Vendor information handler class
7
+ */
8
+ class VendorStoreInfo {
9
+ /**
10
+ * Class constructor
11
+ *
12
+ * @since 3.3.7
13
+ */
14
+ public function __construct() {
15
+ $show_vendor_info = dokan_get_option( 'show_vendor_info', 'dokan_appearance', 'off' );
16
+
17
+ if ( 'on' === $show_vendor_info ) {
18
+ add_action( 'woocommerce_product_meta_end', [ $this, 'add_vendor_info_on_product_single_page' ] );
19
+ }
20
+
21
+ add_filter( 'dokan_settings_fields', array( $this, 'admin_settings_for_vendor_info' ), 10, 2 );
22
+ }
23
+
24
+ /**
25
+ * Display seller info on product single page
26
+ *
27
+ * @since 3.3.7
28
+ *
29
+ * @return void
30
+ */
31
+ public function add_vendor_info_on_product_single_page() {
32
+ global $product;
33
+
34
+ $vendor = dokan_get_vendor_by_product( $product );
35
+ $store_info = $vendor->get_shop_info();
36
+ $store_rating = $vendor->get_rating();
37
+
38
+ dokan_get_template_part(
39
+ 'vendor-store-info',
40
+ '',
41
+ [
42
+ 'vendor' => $vendor,
43
+ 'store_info' => $store_info,
44
+ 'store_rating' => $store_rating,
45
+ ]
46
+ );
47
+ }
48
+
49
+ /**
50
+ * Add setting fields for seller information
51
+ *
52
+ * @param array $settings_fields
53
+ *
54
+ * @param object $dokan_settings
55
+ *
56
+ * @return array
57
+ */
58
+ public function admin_settings_for_vendor_info( $settings_fields, $dokan_settings ) {
59
+ $vendor_info = [
60
+ 'show_vendor_info' => [
61
+ 'name' => 'show_vendor_info',
62
+ 'label' => __( 'Show Vendor Info', 'dokan-lite' ),
63
+ 'desc' => __( 'Show vendor information on product single page', 'dokan-lite' ),
64
+ 'type' => 'checkbox',
65
+ 'default' => 'off',
66
+ 'class' => 'show_vendor_info',
67
+ 'sanitize_callback' => 'sanitize_text_field',
68
+ ],
69
+ ];
70
+
71
+ return $dokan_settings->add_settings_after(
72
+ $settings_fields,
73
+ 'dokan_appearance',
74
+ 'enable_theme_store_sidebar',
75
+ $vendor_info
76
+ );
77
+ }
78
+ }
79
+
includes/Vendor/StoreListsFilter.php CHANGED
@@ -63,10 +63,13 @@ class StoreListsFilter {
63
  * @return void
64
  */
65
  public function filter_area( $stores ) {
 
 
66
  dokan_get_template_part( 'store-lists-filter', '', [
67
  'stores' => $stores,
68
  'number_of_store' => $stores['count'],
69
- 'sort_filters' => $this->sort_by_options()
 
70
  ] );
71
  }
72
 
@@ -77,7 +80,7 @@ class StoreListsFilter {
77
  *
78
  * @return array
79
  */
80
- public function sort_by_options() {
81
  return apply_filters( 'dokan_store_lists_sort_by_options', [
82
  'most_recent' => __( 'Most Recent', 'dokan-lite' ),
83
  'total_orders' => __( 'Most Popular', 'dokan-lite' ),
@@ -96,12 +99,14 @@ class StoreListsFilter {
96
  */
97
  public function filter_pre_user_query( $args, $request ) {
98
  if ( ! empty( $request['stores_orderby'] ) ) {
99
- $orderby = wc_clean( $request['stores_orderby'] );
100
- $args['orderby'] = $orderby;
101
-
102
- add_action( 'pre_user_query', array( $this, 'filter_user_query' ), 9 );
103
  }
104
 
 
 
105
  return $args;
106
  }
107
 
63
  * @return void
64
  */
65
  public function filter_area( $stores ) {
66
+ $sort_by = dokan_get_option( 'store_list_sort_by','dokan_appearance', 'most_recent' );
67
+
68
  dokan_get_template_part( 'store-lists-filter', '', [
69
  'stores' => $stores,
70
  'number_of_store' => $stores['count'],
71
+ 'sort_filters' => self::sort_by_options(),
72
+ 'sort_by' => $sort_by,
73
  ] );
74
  }
75
 
80
  *
81
  * @return array
82
  */
83
+ public static function sort_by_options() {
84
  return apply_filters( 'dokan_store_lists_sort_by_options', [
85
  'most_recent' => __( 'Most Recent', 'dokan-lite' ),
86
  'total_orders' => __( 'Most Popular', 'dokan-lite' ),
99
  */
100
  public function filter_pre_user_query( $args, $request ) {
101
  if ( ! empty( $request['stores_orderby'] ) ) {
102
+ $args['orderby'] = wc_clean( $request['stores_orderby'] );
103
+ } else {
104
+ $sort_by = dokan_get_option( 'store_list_sort_by','dokan_appearance', 'most_recent' );
105
+ $args['orderby'] = ( ! dokan()->is_pro_exists() && ! in_array( $sort_by, [ 'most_recent', 'total_orders' ] ) ) ? 'most_recent': $sort_by;
106
  }
107
 
108
+ add_action( 'pre_user_query', array( $this, 'filter_user_query' ), 9 );
109
+
110
  return $args;
111
  }
112
 
languages/dokan-lite.pot CHANGED
@@ -2,9 +2,9 @@
2
  # This file is distributed under the GPL2.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Dokan 3.3.8\n"
6
  "Report-Msgid-Bugs-To: https://wedevs.com/contact/\n"
7
- "POT-Creation-Date: 2022-02-17 09:16:15+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
@@ -1440,7 +1440,7 @@ msgstr ""
1440
  msgid "Delete"
1441
  msgstr ""
1442
 
1443
- #: includes/Ajax.php:532 includes/Product/Hooks.php:39
1444
  msgid "Error: Nonce verification failed"
1445
  msgstr ""
1446
 
@@ -1798,7 +1798,7 @@ msgstr ""
1798
  #: src/admin/components/AdminNotice.vue:153 src/admin/pages/Settings.vue:474
1799
  #: templates/my-orders.php:83 templates/orders/details.php:204
1800
  #: templates/products/new-product-single.php:220
1801
- #: templates/products/new-product.php:168
1802
  #: templates/products/tmpl-add-product-popup.php:68
1803
  #: templates/store-lists-filter.php:83
1804
  #: templates/withdraw/pending-request-listing-dashboard.php:20
@@ -1920,6 +1920,18 @@ msgstr ""
1920
  msgid "Show store opening/closing Time"
1921
  msgstr ""
1922
 
 
 
 
 
 
 
 
 
 
 
 
 
1923
  #: includes/Dashboard/Templates/Dashboard.php:106
1924
  #: src/admin/pages/Vendors.vue:22 src/admin/pages/Withdraw.vue:23
1925
  #: templates/dashboard/orders-widget.php:31
@@ -1967,32 +1979,32 @@ msgid "Details of your product ..."
1967
  msgstr ""
1968
 
1969
  #: includes/Dashboard/Templates/Products.php:252
1970
- #: includes/Dashboard/Templates/Products.php:403
1971
  #: includes/Product/functions.php:31
1972
  msgid "Please enter product title"
1973
  msgstr ""
1974
 
1975
  #: includes/Dashboard/Templates/Products.php:259
1976
- #: includes/Dashboard/Templates/Products.php:410
1977
  #: includes/Product/functions.php:36
1978
  msgid "Please select a category"
1979
  msgstr ""
1980
 
1981
  #: includes/Dashboard/Templates/Products.php:264
1982
- #: includes/Dashboard/Templates/Products.php:415
1983
  #: includes/Product/functions.php:40
1984
  msgid "Please select AT LEAST ONE category"
1985
  msgstr ""
1986
 
1987
- #: includes/Dashboard/Templates/Products.php:422
1988
  msgid "No product found!"
1989
  msgstr ""
1990
 
1991
- #: includes/Dashboard/Templates/Products.php:426
1992
  msgid "I swear this is not your product!"
1993
  msgstr ""
1994
 
1995
- #: includes/Dashboard/Templates/Products.php:441
1996
  #: includes/Product/functions.php:113
1997
  #. translators: %s: maximum tag length
1998
  msgid "You can only select %s tags"
@@ -2463,28 +2475,24 @@ msgstr ""
2463
  msgid "Withdrawal request for {amount} is cancelled"
2464
  msgstr ""
2465
 
2466
- #: includes/Install/Installer.php:178
2467
- msgid "Store List"
2468
- msgstr ""
2469
-
2470
  #: includes/Order/Hooks.php:300
2471
  msgid "Mark parent order completed when all child orders are completed."
2472
  msgstr ""
2473
 
2474
- #: includes/Order/Hooks.php:348
2475
  msgid "This coupon is invalid for multiple vendors."
2476
  msgstr ""
2477
 
2478
- #: includes/Order/Hooks.php:362
2479
  msgid "A coupon must be restricted with a vendor product."
2480
  msgstr ""
2481
 
2482
- #: includes/Order/Hooks.php:414
2483
  #. translators: %s item name.
2484
  msgid "Unable to restore stock for item %s."
2485
  msgstr ""
2486
 
2487
- #: includes/Order/Hooks.php:491 includes/Order/Hooks.php:510
2488
  msgid "Stock levels reduced:"
2489
  msgstr ""
2490
 
@@ -2962,24 +2970,24 @@ msgstr ""
2962
  msgid "Vendor %s data is removed."
2963
  msgstr ""
2964
 
2965
- #: includes/Product/Hooks.php:46
2966
  msgid "Products not found with this search"
2967
  msgstr ""
2968
 
2969
- #: includes/Product/Hooks.php:134
2970
  msgid "SKU:"
2971
  msgstr ""
2972
 
2973
- #: includes/Product/Hooks.php:171
2974
  msgid "Enter product name"
2975
  msgstr ""
2976
 
2977
- #: includes/Product/Hooks.php:173 includes/Product/functions.php:350
2978
  #: templates/products/listing-filter.php:69
2979
  msgid "Search"
2980
  msgstr ""
2981
 
2982
- #: includes/Product/Hooks.php:176
2983
  msgid "Shop order"
2984
  msgstr ""
2985
 
@@ -2987,6 +2995,14 @@ msgstr ""
2987
  msgid "No product ID found for updating"
2988
  msgstr ""
2989
 
 
 
 
 
 
 
 
 
2990
  #: includes/Product/functions.php:64
2991
  msgid "Sorry, You can not modify another vendor's product !"
2992
  msgstr ""
@@ -4523,11 +4539,11 @@ msgstr ""
4523
  msgid "Go to your Store Dashboard!"
4524
  msgstr ""
4525
 
4526
- #: includes/Vendor/StoreListsFilter.php:82
4527
  msgid "Most Recent"
4528
  msgstr ""
4529
 
4530
- #: includes/Vendor/StoreListsFilter.php:83
4531
  msgid "Most Popular"
4532
  msgstr ""
4533
 
@@ -5218,11 +5234,11 @@ msgid "Sales"
5218
  msgstr ""
5219
 
5220
  #: includes/template-tags.php:119 includes/template-tags.php:123
5221
- #: templates/store-lists-loop.php:118
5222
  msgid "&larr; Previous"
5223
  msgstr ""
5224
 
5225
- #: includes/template-tags.php:135 templates/store-lists-loop.php:119
5226
  msgid "Next &rarr;"
5227
  msgstr ""
5228
 
@@ -5276,7 +5292,7 @@ msgid "Back to Dashboard"
5276
  msgstr ""
5277
 
5278
  #: includes/template-tags.php:564 templates/settings/header.php:14
5279
- #: templates/store-lists-loop.php:94
5280
  msgid "Visit Store"
5281
  msgstr ""
5282
 
@@ -6918,7 +6934,7 @@ msgstr ""
6918
  #: templates/emails/vendor-completed-order.php:48
6919
  #: templates/emails/vendor-new-order.php:48
6920
  #: templates/products/new-product-single.php:198
6921
- #: templates/products/new-product.php:157
6922
  #: templates/products/products-listing-row.php:82
6923
  #: templates/products/products-listing.php:106
6924
  #: templates/products/tmpl-add-product-popup.php:57
@@ -7021,7 +7037,7 @@ msgstr ""
7021
 
7022
  #: templates/global/seller-warning.php:11
7023
  #: templates/products/new-product-single.php:130
7024
- #: templates/products/new-product.php:61
7025
  msgid "Error!"
7026
  msgstr ""
7027
 
@@ -7480,7 +7496,7 @@ msgstr ""
7480
 
7481
  #: templates/products/listing-filter.php:26
7482
  #: templates/products/new-product-single.php:269
7483
- #: templates/products/new-product.php:205
7484
  #: templates/products/tmpl-add-product-popup.php:102
7485
  msgid "- Select a category -"
7486
  msgstr ""
@@ -7518,7 +7534,7 @@ msgid "View Product"
7518
  msgstr ""
7519
 
7520
  #: templates/products/new-product-single.php:138
7521
- #: templates/products/new-product.php:70
7522
  msgid "Success!"
7523
  msgstr ""
7524
 
@@ -7535,7 +7551,7 @@ msgid "Title"
7535
  msgstr ""
7536
 
7537
  #: templates/products/new-product-single.php:165
7538
- #: templates/products/new-product.php:151
7539
  #: templates/products/tmpl-add-product-popup.php:51
7540
  msgid "Product name.."
7541
  msgstr ""
@@ -7564,13 +7580,13 @@ msgid "0.00"
7564
  msgstr ""
7565
 
7566
  #: templates/products/new-product-single.php:218
7567
- #: templates/products/new-product.php:166
7568
  #: templates/products/tmpl-add-product-popup.php:66
7569
  msgid "Discounted Price"
7570
  msgstr ""
7571
 
7572
  #: templates/products/new-product-single.php:219
7573
- #: templates/products/new-product.php:167
7574
  #: templates/products/tmpl-add-product-popup.php:67
7575
  msgid "Schedule"
7576
  msgstr ""
@@ -7580,22 +7596,22 @@ msgid "Product price can't be less than the vendor fee!"
7580
  msgstr ""
7581
 
7582
  #: templates/products/new-product-single.php:239
7583
- #: templates/products/new-product.php:181
7584
  #: templates/products/tmpl-add-product-popup.php:81
7585
  msgid "From"
7586
  msgstr ""
7587
 
7588
  #: templates/products/new-product-single.php:240
7589
  #: templates/products/new-product-single.php:247
7590
- #: templates/products/new-product.php:182
7591
- #: templates/products/new-product.php:189
7592
  #: templates/products/tmpl-add-product-popup.php:82
7593
  #: templates/products/tmpl-add-product-popup.php:89
7594
  msgid "YYYY-MM-DD"
7595
  msgstr ""
7596
 
7597
  #: templates/products/new-product-single.php:246
7598
- #: templates/products/new-product.php:188
7599
  #: templates/products/tmpl-add-product-popup.php:88
7600
  msgid "To"
7601
  msgstr ""
@@ -7610,25 +7626,25 @@ msgid "Please choose a category!"
7610
  msgstr ""
7611
 
7612
  #: templates/products/new-product-single.php:312
7613
- #: templates/products/new-product.php:247
7614
  #: templates/products/tmpl-add-product-popup.php:140
7615
  msgid "Select product category"
7616
  msgstr ""
7617
 
7618
  #: templates/products/new-product-single.php:318
7619
- #: templates/products/new-product.php:253
7620
  #: templates/products/tmpl-add-product-popup.php:146
7621
  msgid "Tags"
7622
  msgstr ""
7623
 
7624
  #: templates/products/new-product-single.php:323
7625
- #: templates/products/new-product.php:257
7626
  #: templates/products/tmpl-add-product-popup.php:19
7627
  msgid "Select tags/Add tags"
7628
  msgstr ""
7629
 
7630
  #: templates/products/new-product-single.php:323
7631
- #: templates/products/new-product.php:257
7632
  #: templates/products/tmpl-add-product-popup.php:19
7633
  msgid "Select product tags"
7634
  msgstr ""
@@ -7639,12 +7655,12 @@ msgid "Upload a product cover image"
7639
  msgstr ""
7640
 
7641
  #: templates/products/new-product-single.php:391
7642
- #: templates/products/new-product.php:131
7643
  msgid "Delete image"
7644
  msgstr ""
7645
 
7646
  #: templates/products/new-product-single.php:397
7647
- #: templates/products/new-product.php:138
7648
  #: templates/products/tmpl-add-product-popup.php:39
7649
  msgid "Add gallery image"
7650
  msgstr ""
@@ -7654,7 +7670,7 @@ msgid "Short Description"
7654
  msgstr ""
7655
 
7656
  #: templates/products/new-product-single.php:418
7657
- #: templates/products/new-product.php:274
7658
  msgid "Description"
7659
  msgstr ""
7660
 
@@ -7668,27 +7684,27 @@ msgstr ""
7668
  msgid "Add New Product"
7669
  msgstr ""
7670
 
7671
- #: templates/products/new-product.php:71
7672
  msgid "You have successfully created <a href=\"%s\"><strong>%s</strong></a> product"
7673
  msgstr ""
7674
 
7675
- #: templates/products/new-product.php:102
7676
  msgid "Upload Product Image"
7677
  msgstr ""
7678
 
7679
- #: templates/products/new-product.php:196
7680
  msgid "Short description of the product..."
7681
  msgstr ""
7682
 
7683
- #: templates/products/new-product.php:274
7684
  msgid "Add your product description"
7685
  msgstr ""
7686
 
7687
- #: templates/products/new-product.php:293
7688
  msgid "Create & Add New"
7689
  msgstr ""
7690
 
7691
- #: templates/products/new-product.php:295
7692
  msgid "Create Product"
7693
  msgstr ""
7694
 
@@ -7855,7 +7871,7 @@ msgstr ""
7855
  msgid "No withdraw method is available. Please contact site admin."
7856
  msgstr ""
7857
 
7858
- #: templates/settings/store-form.php:56 templates/store-lists-loop.php:45
7859
  msgid "Open"
7860
  msgstr ""
7861
 
@@ -7923,14 +7939,22 @@ msgstr ""
7923
  msgid "Store Close Notice"
7924
  msgstr ""
7925
 
7926
- #: templates/store-header.php:13
7927
  msgid "Store Open"
7928
  msgstr ""
7929
 
7930
- #: templates/store-header.php:14
7931
  msgid "Store Closed"
7932
  msgstr ""
7933
 
 
 
 
 
 
 
 
 
7934
  #: templates/store-lists-filter.php:27
7935
  msgid "Total store showing: %d"
7936
  msgid_plural "Total stores showing: %d"
@@ -7941,31 +7965,31 @@ msgstr[1] ""
7941
  msgid "Sort by"
7942
  msgstr ""
7943
 
7944
- #: templates/store-lists-loop.php:37
7945
  msgid "Featured"
7946
  msgstr ""
7947
 
7948
- #: templates/store-lists-loop.php:45
7949
  msgid "Store is Open"
7950
  msgstr ""
7951
 
7952
- #: templates/store-lists-loop.php:47
7953
  msgid "Store is Closed"
7954
  msgstr ""
7955
 
7956
- #: templates/store-lists-loop.php:47
7957
  msgid "Closed"
7958
  msgstr ""
7959
 
7960
- #: templates/store-lists-loop.php:55
7961
  msgid "Rated %s out of 5"
7962
  msgstr ""
7963
 
7964
- #: templates/store-lists-loop.php:58
7965
  msgid "%s out of 5"
7966
  msgstr ""
7967
 
7968
- #: templates/store-lists-loop.php:145
7969
  msgid "No vendor found!"
7970
  msgstr ""
7971
 
@@ -7988,6 +8012,13 @@ msgid ""
7988
  " Each order will be handled by their respective vendor independently."
7989
  msgstr ""
7990
 
 
 
 
 
 
 
 
7991
  #: templates/widgets/store-contact-form.php:18
7992
  msgid "you@example.com"
7993
  msgstr ""
2
  # This file is distributed under the GPL2.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Dokan 3.3.9\n"
6
  "Report-Msgid-Bugs-To: https://wedevs.com/contact/\n"
7
+ "POT-Creation-Date: 2022-02-28 10:20:49+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
1440
  msgid "Delete"
1441
  msgstr ""
1442
 
1443
+ #: includes/Ajax.php:532 includes/Product/Hooks.php:40
1444
  msgid "Error: Nonce verification failed"
1445
  msgstr ""
1446
 
1798
  #: src/admin/components/AdminNotice.vue:153 src/admin/pages/Settings.vue:474
1799
  #: templates/my-orders.php:83 templates/orders/details.php:204
1800
  #: templates/products/new-product-single.php:220
1801
+ #: templates/products/new-product.php:169
1802
  #: templates/products/tmpl-add-product-popup.php:68
1803
  #: templates/store-lists-filter.php:83
1804
  #: templates/withdraw/pending-request-listing-dashboard.php:20
1920
  msgid "Show store opening/closing Time"
1921
  msgstr ""
1922
 
1923
+ #: includes/Customizer.php:395 includes/Install/Installer.php:178
1924
+ msgid "Store List"
1925
+ msgstr ""
1926
+
1927
+ #: includes/Customizer.php:418
1928
+ msgid "Store List Sorting"
1929
+ msgstr ""
1930
+
1931
+ #: includes/Customizer.php:419
1932
+ msgid "How should stores be sorted by default?"
1933
+ msgstr ""
1934
+
1935
  #: includes/Dashboard/Templates/Dashboard.php:106
1936
  #: src/admin/pages/Vendors.vue:22 src/admin/pages/Withdraw.vue:23
1937
  #: templates/dashboard/orders-widget.php:31
1979
  msgstr ""
1980
 
1981
  #: includes/Dashboard/Templates/Products.php:252
1982
+ #: includes/Dashboard/Templates/Products.php:406
1983
  #: includes/Product/functions.php:31
1984
  msgid "Please enter product title"
1985
  msgstr ""
1986
 
1987
  #: includes/Dashboard/Templates/Products.php:259
1988
+ #: includes/Dashboard/Templates/Products.php:413
1989
  #: includes/Product/functions.php:36
1990
  msgid "Please select a category"
1991
  msgstr ""
1992
 
1993
  #: includes/Dashboard/Templates/Products.php:264
1994
+ #: includes/Dashboard/Templates/Products.php:418
1995
  #: includes/Product/functions.php:40
1996
  msgid "Please select AT LEAST ONE category"
1997
  msgstr ""
1998
 
1999
+ #: includes/Dashboard/Templates/Products.php:425
2000
  msgid "No product found!"
2001
  msgstr ""
2002
 
2003
+ #: includes/Dashboard/Templates/Products.php:429
2004
  msgid "I swear this is not your product!"
2005
  msgstr ""
2006
 
2007
+ #: includes/Dashboard/Templates/Products.php:444
2008
  #: includes/Product/functions.php:113
2009
  #. translators: %s: maximum tag length
2010
  msgid "You can only select %s tags"
2475
  msgid "Withdrawal request for {amount} is cancelled"
2476
  msgstr ""
2477
 
 
 
 
 
2478
  #: includes/Order/Hooks.php:300
2479
  msgid "Mark parent order completed when all child orders are completed."
2480
  msgstr ""
2481
 
2482
+ #: includes/Order/Hooks.php:356
2483
  msgid "This coupon is invalid for multiple vendors."
2484
  msgstr ""
2485
 
2486
+ #: includes/Order/Hooks.php:370
2487
  msgid "A coupon must be restricted with a vendor product."
2488
  msgstr ""
2489
 
2490
+ #: includes/Order/Hooks.php:422
2491
  #. translators: %s item name.
2492
  msgid "Unable to restore stock for item %s."
2493
  msgstr ""
2494
 
2495
+ #: includes/Order/Hooks.php:499 includes/Order/Hooks.php:518
2496
  msgid "Stock levels reduced:"
2497
  msgstr ""
2498
 
2970
  msgid "Vendor %s data is removed."
2971
  msgstr ""
2972
 
2973
+ #: includes/Product/Hooks.php:47
2974
  msgid "Products not found with this search"
2975
  msgstr ""
2976
 
2977
+ #: includes/Product/Hooks.php:135
2978
  msgid "SKU:"
2979
  msgstr ""
2980
 
2981
+ #: includes/Product/Hooks.php:172
2982
  msgid "Enter product name"
2983
  msgstr ""
2984
 
2985
+ #: includes/Product/Hooks.php:174 includes/Product/functions.php:350
2986
  #: templates/products/listing-filter.php:69
2987
  msgid "Search"
2988
  msgstr ""
2989
 
2990
+ #: includes/Product/Hooks.php:177
2991
  msgid "Shop order"
2992
  msgstr ""
2993
 
2995
  msgid "No product ID found for updating"
2996
  msgstr ""
2997
 
2998
+ #: includes/Product/VendorStoreInfo.php:62
2999
+ msgid "Show Vendor Info"
3000
+ msgstr ""
3001
+
3002
+ #: includes/Product/VendorStoreInfo.php:63
3003
+ msgid "Show vendor information on product single page"
3004
+ msgstr ""
3005
+
3006
  #: includes/Product/functions.php:64
3007
  msgid "Sorry, You can not modify another vendor's product !"
3008
  msgstr ""
4539
  msgid "Go to your Store Dashboard!"
4540
  msgstr ""
4541
 
4542
+ #: includes/Vendor/StoreListsFilter.php:85
4543
  msgid "Most Recent"
4544
  msgstr ""
4545
 
4546
+ #: includes/Vendor/StoreListsFilter.php:86
4547
  msgid "Most Popular"
4548
  msgstr ""
4549
 
5234
  msgstr ""
5235
 
5236
  #: includes/template-tags.php:119 includes/template-tags.php:123
5237
+ #: templates/store-lists-loop.php:116
5238
  msgid "&larr; Previous"
5239
  msgstr ""
5240
 
5241
+ #: includes/template-tags.php:135 templates/store-lists-loop.php:117
5242
  msgid "Next &rarr;"
5243
  msgstr ""
5244
 
5292
  msgstr ""
5293
 
5294
  #: includes/template-tags.php:564 templates/settings/header.php:14
5295
+ #: templates/store-lists-loop.php:92
5296
  msgid "Visit Store"
5297
  msgstr ""
5298
 
6934
  #: templates/emails/vendor-completed-order.php:48
6935
  #: templates/emails/vendor-new-order.php:48
6936
  #: templates/products/new-product-single.php:198
6937
+ #: templates/products/new-product.php:158
6938
  #: templates/products/products-listing-row.php:82
6939
  #: templates/products/products-listing.php:106
6940
  #: templates/products/tmpl-add-product-popup.php:57
7037
 
7038
  #: templates/global/seller-warning.php:11
7039
  #: templates/products/new-product-single.php:130
7040
+ #: templates/products/new-product.php:62
7041
  msgid "Error!"
7042
  msgstr ""
7043
 
7496
 
7497
  #: templates/products/listing-filter.php:26
7498
  #: templates/products/new-product-single.php:269
7499
+ #: templates/products/new-product.php:206
7500
  #: templates/products/tmpl-add-product-popup.php:102
7501
  msgid "- Select a category -"
7502
  msgstr ""
7534
  msgstr ""
7535
 
7536
  #: templates/products/new-product-single.php:138
7537
+ #: templates/products/new-product.php:71
7538
  msgid "Success!"
7539
  msgstr ""
7540
 
7551
  msgstr ""
7552
 
7553
  #: templates/products/new-product-single.php:165
7554
+ #: templates/products/new-product.php:152
7555
  #: templates/products/tmpl-add-product-popup.php:51
7556
  msgid "Product name.."
7557
  msgstr ""
7580
  msgstr ""
7581
 
7582
  #: templates/products/new-product-single.php:218
7583
+ #: templates/products/new-product.php:167
7584
  #: templates/products/tmpl-add-product-popup.php:66
7585
  msgid "Discounted Price"
7586
  msgstr ""
7587
 
7588
  #: templates/products/new-product-single.php:219
7589
+ #: templates/products/new-product.php:168
7590
  #: templates/products/tmpl-add-product-popup.php:67
7591
  msgid "Schedule"
7592
  msgstr ""
7596
  msgstr ""
7597
 
7598
  #: templates/products/new-product-single.php:239
7599
+ #: templates/products/new-product.php:182
7600
  #: templates/products/tmpl-add-product-popup.php:81
7601
  msgid "From"
7602
  msgstr ""
7603
 
7604
  #: templates/products/new-product-single.php:240
7605
  #: templates/products/new-product-single.php:247
7606
+ #: templates/products/new-product.php:183
7607
+ #: templates/products/new-product.php:190
7608
  #: templates/products/tmpl-add-product-popup.php:82
7609
  #: templates/products/tmpl-add-product-popup.php:89
7610
  msgid "YYYY-MM-DD"
7611
  msgstr ""
7612
 
7613
  #: templates/products/new-product-single.php:246
7614
+ #: templates/products/new-product.php:189
7615
  #: templates/products/tmpl-add-product-popup.php:88
7616
  msgid "To"
7617
  msgstr ""
7626
  msgstr ""
7627
 
7628
  #: templates/products/new-product-single.php:312
7629
+ #: templates/products/new-product.php:248
7630
  #: templates/products/tmpl-add-product-popup.php:140
7631
  msgid "Select product category"
7632
  msgstr ""
7633
 
7634
  #: templates/products/new-product-single.php:318
7635
+ #: templates/products/new-product.php:254
7636
  #: templates/products/tmpl-add-product-popup.php:146
7637
  msgid "Tags"
7638
  msgstr ""
7639
 
7640
  #: templates/products/new-product-single.php:323
7641
+ #: templates/products/new-product.php:258
7642
  #: templates/products/tmpl-add-product-popup.php:19
7643
  msgid "Select tags/Add tags"
7644
  msgstr ""
7645
 
7646
  #: templates/products/new-product-single.php:323
7647
+ #: templates/products/new-product.php:258
7648
  #: templates/products/tmpl-add-product-popup.php:19
7649
  msgid "Select product tags"
7650
  msgstr ""
7655
  msgstr ""
7656
 
7657
  #: templates/products/new-product-single.php:391
7658
+ #: templates/products/new-product.php:132
7659
  msgid "Delete image"
7660
  msgstr ""
7661
 
7662
  #: templates/products/new-product-single.php:397
7663
+ #: templates/products/new-product.php:139
7664
  #: templates/products/tmpl-add-product-popup.php:39
7665
  msgid "Add gallery image"
7666
  msgstr ""
7670
  msgstr ""
7671
 
7672
  #: templates/products/new-product-single.php:418
7673
+ #: templates/products/new-product.php:275
7674
  msgid "Description"
7675
  msgstr ""
7676
 
7684
  msgid "Add New Product"
7685
  msgstr ""
7686
 
7687
+ #: templates/products/new-product.php:72
7688
  msgid "You have successfully created <a href=\"%s\"><strong>%s</strong></a> product"
7689
  msgstr ""
7690
 
7691
+ #: templates/products/new-product.php:103
7692
  msgid "Upload Product Image"
7693
  msgstr ""
7694
 
7695
+ #: templates/products/new-product.php:197
7696
  msgid "Short description of the product..."
7697
  msgstr ""
7698
 
7699
+ #: templates/products/new-product.php:275
7700
  msgid "Add your product description"
7701
  msgstr ""
7702
 
7703
+ #: templates/products/new-product.php:294
7704
  msgid "Create & Add New"
7705
  msgstr ""
7706
 
7707
+ #: templates/products/new-product.php:296
7708
  msgid "Create Product"
7709
  msgstr ""
7710
 
7871
  msgid "No withdraw method is available. Please contact site admin."
7872
  msgstr ""
7873
 
7874
+ #: templates/settings/store-form.php:56 templates/store-lists-loop.php:43
7875
  msgid "Open"
7876
  msgstr ""
7877
 
7939
  msgid "Store Close Notice"
7940
  msgstr ""
7941
 
7942
+ #: templates/store-header.php:17
7943
  msgid "Store Open"
7944
  msgstr ""
7945
 
7946
+ #: templates/store-header.php:18
7947
  msgid "Store Closed"
7948
  msgstr ""
7949
 
7950
+ #: templates/store-header.php:113
7951
+ msgid "Weekly Store Timing"
7952
+ msgstr ""
7953
+
7954
+ #: templates/store-header.php:124
7955
+ msgid "CLOSED"
7956
+ msgstr ""
7957
+
7958
  #: templates/store-lists-filter.php:27
7959
  msgid "Total store showing: %d"
7960
  msgid_plural "Total stores showing: %d"
7965
  msgid "Sort by"
7966
  msgstr ""
7967
 
7968
+ #: templates/store-lists-loop.php:36
7969
  msgid "Featured"
7970
  msgstr ""
7971
 
7972
+ #: templates/store-lists-loop.php:43
7973
  msgid "Store is Open"
7974
  msgstr ""
7975
 
7976
+ #: templates/store-lists-loop.php:45
7977
  msgid "Store is Closed"
7978
  msgstr ""
7979
 
7980
+ #: templates/store-lists-loop.php:45
7981
  msgid "Closed"
7982
  msgstr ""
7983
 
7984
+ #: templates/store-lists-loop.php:53
7985
  msgid "Rated %s out of 5"
7986
  msgstr ""
7987
 
7988
+ #: templates/store-lists-loop.php:56
7989
  msgid "%s out of 5"
7990
  msgstr ""
7991
 
7992
+ #: templates/store-lists-loop.php:143
7993
  msgid "No vendor found!"
7994
  msgstr ""
7995
 
8012
  " Each order will be handled by their respective vendor independently."
8013
  msgstr ""
8014
 
8015
+ #: templates/vendor-store-info.php:32
8016
+ #. translators: %d reviews count
8017
+ msgid "%d Review"
8018
+ msgid_plural "%d Reviews"
8019
+ msgstr[0] ""
8020
+ msgstr[1] ""
8021
+
8022
  #: templates/widgets/store-contact-form.php:18
8023
  msgid "you@example.com"
8024
  msgstr ""
readme.txt CHANGED
@@ -3,11 +3,11 @@ Contributors: tareq1988, wedevs, nizamuddinbabu
3
  Donate Link: http://tareq.co/donate/
4
  Tags: WooCommerce multivendor marketplace, multi vendor marketplace, multi seller store, multi-vendor, multi seller, commissions, multivendor, marketplace, product vendors, woocommerce vendor, commission rate, e-commerce, woocommerce, ebay, ecommerce, yith, yithemes
5
  Requires at least: 4.4
6
- Tested up to: 5.9
7
  WC requires at least: 3.0
8
- WC tested up to: 6.2.0
9
  Requires PHP: 5.6
10
- Stable tag: 3.3.8
11
  License: GPLv2 or later
12
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
13
 
@@ -306,6 +306,14 @@ A. Just install and activate the PRO version without deleting the free plugin. A
306
 
307
  == Changelog ==
308
 
 
 
 
 
 
 
 
 
309
  = v3.3.8 ( Feb 17, 2022 ) =
310
 
311
  - **fix:** Store open close time widget wasn't working
3
  Donate Link: http://tareq.co/donate/
4
  Tags: WooCommerce multivendor marketplace, multi vendor marketplace, multi seller store, multi-vendor, multi seller, commissions, multivendor, marketplace, product vendors, woocommerce vendor, commission rate, e-commerce, woocommerce, ebay, ecommerce, yith, yithemes
5
  Requires at least: 4.4
6
+ Tested up to: 5.9.1
7
  WC requires at least: 3.0
8
+ WC tested up to: 6.2.1
9
  Requires PHP: 5.6
10
+ Stable tag: 3.3.9
11
  License: GPLv2 or later
12
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
13
 
306
 
307
  == Changelog ==
308
 
309
+ = v3.3.9 ( Feb 28, 2022 ) =
310
+
311
+ - **update:** Added theme customizer settings to set default order by filter for store listing page #1505
312
+ - **update:** Added seller information under single product page, also added an admin setting entry to enable/disable this feature #1506
313
+ - **update:** Display store open/close time list on hover under single store page. #1517
314
+ - **fix:** Added post_date_gmt and post_modified_gmt fields data when creating a product from frontend dashboard #1514
315
+ - **fix:** Create order API with coupon lines data giving fatal error, thanks to James Bechet for this fix #1441
316
+
317
  = v3.3.8 ( Feb 17, 2022 ) =
318
 
319
  - **fix:** Store open close time widget wasn't working
templates/products/new-product.php CHANGED
@@ -50,6 +50,7 @@ use WeDevs\Dokan\Walkers\TaxonomyDropdown;
50
  </h1>
51
  </header><!-- .entry-header -->
52
 
 
53
 
54
  <div class="dokan-new-product-area">
55
  <?php if ( dokan()->dashboard->templates->products->has_errors() ) { ?>
50
  </h1>
51
  </header><!-- .entry-header -->
52
 
53
+ <?php do_action( 'dokan_new_product_before_product_area' ); ?>
54
 
55
  <div class="dokan-new-product-area">
56
  <?php if ( dokan()->dashboard->templates->products->has_errors() ) { ?>
templates/products/tmpl-add-product-popup.php CHANGED
@@ -6,7 +6,7 @@ use WeDevs\Dokan\Walkers\TaxonomyDropdown;
6
  <script type="text/html" id="tmpl-dokan-add-new-product">
7
  <div id="dokan-add-new-product-popup" class="white-popup dokan-add-new-product-popup">
8
  <h2><i class="fas fa-briefcase">&nbsp;</i>&nbsp;<?php esc_html_e( 'Add New Product', 'dokan-lite' ); ?></h2>
9
-
10
  <form action="" method="post" id="dokan-add-new-product-form">
11
  <div class="product-form-container">
12
  <div class="content-half-part dokan-feat-image-content">
6
  <script type="text/html" id="tmpl-dokan-add-new-product">
7
  <div id="dokan-add-new-product-popup" class="white-popup dokan-add-new-product-popup">
8
  <h2><i class="fas fa-briefcase">&nbsp;</i>&nbsp;<?php esc_html_e( 'Add New Product', 'dokan-lite' ); ?></h2>
9
+ <?php do_action( 'dokan_new_product_before_product_area' ); ?>
10
  <form action="" method="post" id="dokan-add-new-product-form">
11
  <div class="product-form-container">
12
  <div class="content-half-part dokan-feat-image-content">
templates/store-header.php CHANGED
@@ -5,6 +5,10 @@ $social_info = $store_user->get_social_profiles();
5
  $store_tabs = dokan_get_store_tabs( $store_user->get_id() );
6
  $social_fields = dokan_get_social_profile_fields();
7
 
 
 
 
 
8
  $dokan_appearance = get_option( 'dokan_appearance' );
9
  $profile_layout = empty( $dokan_appearance['store_header_template'] ) ? 'default' : $dokan_appearance['store_header_template'];
10
  $store_address = dokan_get_seller_short_address( $store_user->get_id(), false );
@@ -57,7 +61,7 @@ if ( 'layout3' === $profile_layout ) {
57
  size="150">
58
  </div>
59
  <?php if ( ! empty( $store_user->get_shop_name() ) && 'default' === $profile_layout ) { ?>
60
- <h1 class="store-name"><?php echo esc_html( $store_user->get_shop_name() ); ?></h1>
61
  <?php } ?>
62
  </div>
63
 
@@ -95,15 +99,63 @@ if ( 'layout3' === $profile_layout ) {
95
  <?php if ( $show_store_open_close == 'on' && $dokan_store_time_enabled == 'yes') : ?>
96
  <li class="dokan-store-open-close">
97
  <i class="fas fa-shopping-cart"></i>
98
- <?php if ( dokan_is_store_open( $store_user->get_id() ) ) {
99
- echo esc_attr( $store_open_notice );
100
- } else {
101
- echo esc_attr( $store_closed_notice );
102
- } ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
103
  </li>
104
  <?php endif ?>
105
 
106
- <?php do_action( 'dokan_store_header_info_fields', $store_user->get_id() ); ?>
107
  </ul>
108
 
109
  <?php if ( $social_fields ) { ?>
5
  $store_tabs = dokan_get_store_tabs( $store_user->get_id() );
6
  $social_fields = dokan_get_social_profile_fields();
7
 
8
+ $dokan_store_times = ! empty( $store_info['dokan_store_time'] ) ? $store_info['dokan_store_time'] : [];
9
+ $current_time = dokan_current_datetime();
10
+ $today = strtolower( $current_time->format( 'l' ) );
11
+
12
  $dokan_appearance = get_option( 'dokan_appearance' );
13
  $profile_layout = empty( $dokan_appearance['store_header_template'] ) ? 'default' : $dokan_appearance['store_header_template'];
14
  $store_address = dokan_get_seller_short_address( $store_user->get_id(), false );
61
  size="150">
62
  </div>
63
  <?php if ( ! empty( $store_user->get_shop_name() ) && 'default' === $profile_layout ) { ?>
64
+ <h1 class="store-name"><?php echo esc_html( $store_user->get_shop_name() ); ?> <?php apply_filters( 'dokan_store_header_after_store_name', $store_user ); ?></h1>
65
  <?php } ?>
66
  </div>
67
 
99
  <?php if ( $show_store_open_close == 'on' && $dokan_store_time_enabled == 'yes') : ?>
100
  <li class="dokan-store-open-close">
101
  <i class="fas fa-shopping-cart"></i>
102
+ <div class="store-open-close-notice">
103
+ <?php if ( dokan_is_store_open( $store_user->get_id() ) ) : ?>
104
+ <span class='store-notice'><?php echo esc_attr( $store_open_notice ); ?></span>
105
+ <?php else : ?>
106
+ <span class='store-notice'><?php echo esc_attr( $store_closed_notice ); ?></span>
107
+ <?php endif; ?>
108
+
109
+ <span class="fa fa-angle-down"></span>
110
+ <div id="vendor-store-times">
111
+ <div class="store-times-heading">
112
+ <i class="fas fa-calendar-day"></i>
113
+ <h4><?php esc_html_e( 'Weekly Store Timing', 'dokan-lite' ); ?></h4>
114
+ </div>
115
+ <?php
116
+ foreach ( dokan_get_translated_days() as $day_key => $day ) :
117
+ $store_info = ! empty( $dokan_store_times[ $day_key ] ) ? $dokan_store_times[ $day_key ] : [];
118
+ $store_status = ! empty( $store_info['status'] ) ? $store_info['status'] : 'close';
119
+ ?>
120
+ <div class="store-time-tags">
121
+ <div class="store-days <?php echo $today === $day_key ? 'current_day' : ''; ?>"><?php echo esc_html( $day ); ?></div>
122
+ <div class="store-times">
123
+ <?php if ( $store_status === 'close' ) : ?>
124
+ <span class="store-close"><?php esc_html_e( 'CLOSED', 'dokan-lite' ); ?></span>
125
+ <?php endif; ?>
126
+
127
+ <?php
128
+ // Get store times.
129
+ $opening_times = ! empty( $store_info['opening_time'] ) ? $store_info['opening_time'] : [];
130
+
131
+ // If dokan pro doesn't exists then get single item.
132
+ if ( ! dokan()->is_pro_exists() ) {
133
+ $opening_times = ! empty( $opening_times ) && is_array( $opening_times ) ? $opening_times[0] : [];
134
+ }
135
+
136
+ $times_length = ! empty( $opening_times ) ? count( (array) $opening_times ) : 0;
137
+
138
+ // Get formatted times.
139
+ for ( $index = 0; $index < $times_length; $index++ ) :
140
+ $formatted_opening_time = $current_time->modify( $store_info['opening_time'][ $index ] );
141
+ $formatted_closing_time = $current_time->modify( $store_info['closing_time'][ $index ] );
142
+ $exact_time = '';
143
+
144
+ if ( $today === $day_key && $formatted_opening_time <= $current_time && $formatted_closing_time >= $current_time ) {
145
+ $exact_time = 'current_time';
146
+ }
147
+ ?>
148
+ <span class="store-open <?php echo $exact_time; ?>" href="#"><?php echo esc_html( $formatted_opening_time->format( wc_time_format() ) . ' - ' . $formatted_closing_time->format( wc_time_format() ) ); ?></span>
149
+ <?php endfor; ?>
150
+ </div>
151
+ </div>
152
+ <?php endforeach; ?>
153
+ </div>
154
+ </div>
155
  </li>
156
  <?php endif ?>
157
 
158
+ <?php do_action( 'dokan_store_header_info_fields', $store_user->get_id() ); ?>
159
  </ul>
160
 
161
  <?php if ( $social_fields ) { ?>
templates/store-lists-filter.php CHANGED
@@ -23,7 +23,7 @@ defined( 'ABSPATH' ) || exit; ?>
23
  <?php do_action( 'dokan_before_store_lists_filter_left', $stores ); ?>
24
  <div class="left">
25
  <p class="item store-count">
26
- <?php
27
  printf( _n( 'Total store showing: %d', 'Total stores showing: %d', $number_of_store, 'dokan-lite' ), number_format_i18n( $number_of_store ) );
28
  ?>
29
  </p>
@@ -49,7 +49,7 @@ defined( 'ABSPATH' ) || exit; ?>
49
  <select name="stores_orderby" id="stores_orderby" aria-label="<?php esc_html_e( 'Sort by', 'dokan-lite' ); ?>">
50
  <?php
51
  foreach ( $sort_filters as $key => $filter ) {
52
- $optoins = "<option value='${key}'>${filter}</option>";
53
  printf( $optoins );
54
  }
55
  ?>
23
  <?php do_action( 'dokan_before_store_lists_filter_left', $stores ); ?>
24
  <div class="left">
25
  <p class="item store-count">
26
+ <?php
27
  printf( _n( 'Total store showing: %d', 'Total stores showing: %d', $number_of_store, 'dokan-lite' ), number_format_i18n( $number_of_store ) );
28
  ?>
29
  </p>
49
  <select name="stores_orderby" id="stores_orderby" aria-label="<?php esc_html_e( 'Sort by', 'dokan-lite' ); ?>">
50
  <?php
51
  foreach ( $sort_filters as $key => $filter ) {
52
+ $optoins = "<option value='${key}'" . selected( $sort_by, $key, false ) . ">${filter}</option>";
53
  printf( $optoins );
54
  }
55
  ?>
templates/store-lists-loop.php CHANGED
@@ -14,7 +14,6 @@
14
  $store_info = dokan_get_store_info( $seller->ID );
15
  $store_address = dokan_get_seller_short_address( $seller->ID );
16
  $store_banner_url = $store_banner_id ? wp_get_attachment_image_src( $store_banner_id, $image_size ) : DOKAN_PLUGIN_ASSEST . '/images/default-store-banner.png';
17
-
18
  $show_store_open_close = dokan_get_option( 'store_open_close', 'dokan_appearance', 'on' );
19
  $dokan_store_time_enabled = isset( $store_info['dokan_store_time_enabled'] ) ? $store_info['dokan_store_time_enabled'] : '';
20
  $store_open_is_on = ( 'on' === $show_store_open_close && 'yes' === $dokan_store_time_enabled && ! $is_store_featured ) ? 'store_open_is_on' : '';
@@ -39,7 +38,6 @@
39
 
40
  <?php do_action( 'dokan_seller_listing_after_featured', $seller, $store_info ); ?>
41
  </div>
42
-
43
  <?php if ( 'on' === $show_store_open_close && 'yes' === $dokan_store_time_enabled ) : ?>
44
  <?php if ( dokan_is_store_open( $seller->ID ) ) { ?>
45
  <span class="dokan-store-is-open-close-status dokan-store-is-open-status" title="<?php esc_attr_e( 'Store is Open', 'dokan-lite' );?>"><?php esc_html_e( 'Open', 'dokan-lite' ); ?></span>
@@ -49,7 +47,7 @@
49
  <?php endif ?>
50
 
51
  <div class="store-data <?php echo esc_attr( $store_open_is_on ); ?>">
52
- <h2><a href="<?php echo esc_attr( $store_url ); ?>"><?php echo esc_html( $store_name ); ?></a></h2>
53
 
54
  <?php if ( !empty( $store_rating['count'] ) ): ?>
55
  <div class="dokan-seller-rating" title="<?php echo sprintf( esc_attr__( 'Rated %s out of 5', 'dokan-lite' ), esc_attr( $store_rating['rating'] ) ) ?>">
14
  $store_info = dokan_get_store_info( $seller->ID );
15
  $store_address = dokan_get_seller_short_address( $seller->ID );
16
  $store_banner_url = $store_banner_id ? wp_get_attachment_image_src( $store_banner_id, $image_size ) : DOKAN_PLUGIN_ASSEST . '/images/default-store-banner.png';
 
17
  $show_store_open_close = dokan_get_option( 'store_open_close', 'dokan_appearance', 'on' );
18
  $dokan_store_time_enabled = isset( $store_info['dokan_store_time_enabled'] ) ? $store_info['dokan_store_time_enabled'] : '';
19
  $store_open_is_on = ( 'on' === $show_store_open_close && 'yes' === $dokan_store_time_enabled && ! $is_store_featured ) ? 'store_open_is_on' : '';
38
 
39
  <?php do_action( 'dokan_seller_listing_after_featured', $seller, $store_info ); ?>
40
  </div>
 
41
  <?php if ( 'on' === $show_store_open_close && 'yes' === $dokan_store_time_enabled ) : ?>
42
  <?php if ( dokan_is_store_open( $seller->ID ) ) { ?>
43
  <span class="dokan-store-is-open-close-status dokan-store-is-open-status" title="<?php esc_attr_e( 'Store is Open', 'dokan-lite' );?>"><?php esc_html_e( 'Open', 'dokan-lite' ); ?></span>
47
  <?php endif ?>
48
 
49
  <div class="store-data <?php echo esc_attr( $store_open_is_on ); ?>">
50
+ <h2><a href="<?php echo esc_attr( $store_url ); ?>"><?php echo esc_html( $store_name ); ?></a> <?php apply_filters( 'dokan_store_list_loop_after_store_name', $vendor ); ?></h2>
51
 
52
  <?php if ( !empty( $store_rating['count'] ) ): ?>
53
  <div class="dokan-seller-rating" title="<?php echo sprintf( esc_attr__( 'Rated %s out of 5', 'dokan-lite' ), esc_attr( $store_rating['rating'] ) ) ?>">
templates/vendor-store-info.php ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Dokan vendor information template on product page
4
+ *
5
+ * @since 3.3.7
6
+ *
7
+ * @param Object $vendor
8
+ * @param Array $store_info
9
+ * @param Array $store_rating
10
+ *
11
+ * @package dokan
12
+ */
13
+ ?>
14
+
15
+ <div class="dokan-vendor-info-wrap">
16
+ <div class="dokan-vendor-image">
17
+ <img src="<?php echo esc_url( $vendor->get_avatar() ); ?>" alt="<?php echo esc_attr( $store_info['store_name'] ); ?>">
18
+ </div>
19
+ <div class="dokan-vendor-info">
20
+ <div class="dokan-vendor-name">
21
+ <a href="<?php echo esc_attr( $vendor->get_shop_url() ); ?>"><h5><?php echo esc_html( $store_info['store_name'] ); ?></h5></a>
22
+ <?php apply_filters( 'dokan_product_single_after_store_name', $vendor ); ?>
23
+ </div>
24
+ <div class="dokan-vendor-rating">
25
+ <?php if ( $store_rating['count'] ) : ?>
26
+ <p><?php echo esc_html( $store_rating['rating'] ); ?></p>
27
+ <?php endif; ?>
28
+ <?php echo wp_kses_post( dokan_generate_ratings( $store_rating['rating'], 5 ) ); ?>
29
+ </div>
30
+ <?php if ( $store_rating['count'] ) : ?>
31
+ <?php // translators: %d reviews count ?>
32
+ <p class="dokan-ratings-count">(<?php echo sprintf( _n( '%d Review', '%d Reviews', $store_rating['count'], 'dokan' ), $store_rating['count'] ); ?>)</p>
33
+ <?php endif; ?>
34
+ </div>
35
+ </div>
templates/whats-new.php CHANGED
@@ -3,6 +3,36 @@
3
  * When you are adding new version please follow this sequence for changes: New Feature, New, Improvement, Fix...
4
  */
5
  $changelog = [
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6
  [
7
  'version' => 'Version 3.3.8',
8
  'released' => '2022-02-17',
3
  * When you are adding new version please follow this sequence for changes: New Feature, New, Improvement, Fix...
4
  */
5
  $changelog = [
6
+ [
7
+ 'version' => 'Version 3.3.9',
8
+ 'released' => '2022-02-28',
9
+ 'changes' => [
10
+ 'Improvement' => [
11
+ [
12
+ 'title' => 'Added new theme customizer settings to set default order by filter for store listing page',
13
+ 'description' => '',
14
+ ],
15
+ [
16
+ 'title' => 'Added seller information under single product page, also added an admin setting entry to enable/disable this feature',
17
+ 'description' => '',
18
+ ],
19
+ [
20
+ 'title' => 'Display store open/close time list on hover under single store page.',
21
+ 'description' => '',
22
+ ],
23
+ ],
24
+ 'Fix' => [
25
+ [
26
+ 'title' => 'Added post_date_gmt and post_modified_gmt fields data when creating a product from frontend dashboard',
27
+ 'description' => '',
28
+ ],
29
+ [
30
+ 'title' => 'Create order API with coupon lines data giving fatal error',
31
+ 'description' => '',
32
+ ],
33
+ ],
34
+ ],
35
+ ],
36
  [
37
  'version' => 'Version 3.3.8',
38
  'released' => '2022-02-17',
vendor/autoload.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
- return ComposerAutoloaderInit453242ef73f85473c17b8233f473c31a::getLoader();
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
+ return ComposerAutoloaderInitb714294970ad2c2b58d4cffcbe1da5cb::getLoader();
vendor/composer/autoload_classmap.php CHANGED
@@ -79,6 +79,7 @@ return array(
79
  'WeDevs\\Dokan\\Product\\Hooks' => $baseDir . '/includes/Product/Hooks.php',
80
  'WeDevs\\Dokan\\Product\\Manager' => $baseDir . '/includes/Product/Manager.php',
81
  'WeDevs\\Dokan\\Product\\ProductCache' => $baseDir . '/includes/Product/ProductCache.php',
 
82
  'WeDevs\\Dokan\\REST\\AdminDashboardController' => $baseDir . '/includes/REST/AdminDashboardController.php',
83
  'WeDevs\\Dokan\\REST\\AdminMiscController' => $baseDir . '/includes/REST/AdminMiscController.php',
84
  'WeDevs\\Dokan\\REST\\AdminNoticeController' => $baseDir . '/includes/REST/AdminNoticeController.php',
79
  'WeDevs\\Dokan\\Product\\Hooks' => $baseDir . '/includes/Product/Hooks.php',
80
  'WeDevs\\Dokan\\Product\\Manager' => $baseDir . '/includes/Product/Manager.php',
81
  'WeDevs\\Dokan\\Product\\ProductCache' => $baseDir . '/includes/Product/ProductCache.php',
82
+ 'WeDevs\\Dokan\\Product\\VendorStoreInfo' => $baseDir . '/includes/Product/VendorStoreInfo.php',
83
  'WeDevs\\Dokan\\REST\\AdminDashboardController' => $baseDir . '/includes/REST/AdminDashboardController.php',
84
  'WeDevs\\Dokan\\REST\\AdminMiscController' => $baseDir . '/includes/REST/AdminMiscController.php',
85
  'WeDevs\\Dokan\\REST\\AdminNoticeController' => $baseDir . '/includes/REST/AdminNoticeController.php',
vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInit453242ef73f85473c17b8233f473c31a
6
  {
7
  private static $loader;
8
 
@@ -24,15 +24,15 @@ class ComposerAutoloaderInit453242ef73f85473c17b8233f473c31a
24
 
25
  require __DIR__ . '/platform_check.php';
26
 
27
- spl_autoload_register(array('ComposerAutoloaderInit453242ef73f85473c17b8233f473c31a', 'loadClassLoader'), true, true);
28
  self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
29
- spl_autoload_unregister(array('ComposerAutoloaderInit453242ef73f85473c17b8233f473c31a', 'loadClassLoader'));
30
 
31
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
32
  if ($useStaticLoader) {
33
  require __DIR__ . '/autoload_static.php';
34
 
35
- call_user_func(\Composer\Autoload\ComposerStaticInit453242ef73f85473c17b8233f473c31a::getInitializer($loader));
36
  } else {
37
  $map = require __DIR__ . '/autoload_namespaces.php';
38
  foreach ($map as $namespace => $path) {
@@ -53,19 +53,19 @@ class ComposerAutoloaderInit453242ef73f85473c17b8233f473c31a
53
  $loader->register(true);
54
 
55
  if ($useStaticLoader) {
56
- $includeFiles = Composer\Autoload\ComposerStaticInit453242ef73f85473c17b8233f473c31a::$files;
57
  } else {
58
  $includeFiles = require __DIR__ . '/autoload_files.php';
59
  }
60
  foreach ($includeFiles as $fileIdentifier => $file) {
61
- composerRequire453242ef73f85473c17b8233f473c31a($fileIdentifier, $file);
62
  }
63
 
64
  return $loader;
65
  }
66
  }
67
 
68
- function composerRequire453242ef73f85473c17b8233f473c31a($fileIdentifier, $file)
69
  {
70
  if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
71
  require $file;
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
+ class ComposerAutoloaderInitb714294970ad2c2b58d4cffcbe1da5cb
6
  {
7
  private static $loader;
8
 
24
 
25
  require __DIR__ . '/platform_check.php';
26
 
27
+ spl_autoload_register(array('ComposerAutoloaderInitb714294970ad2c2b58d4cffcbe1da5cb', 'loadClassLoader'), true, true);
28
  self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
29
+ spl_autoload_unregister(array('ComposerAutoloaderInitb714294970ad2c2b58d4cffcbe1da5cb', 'loadClassLoader'));
30
 
31
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
32
  if ($useStaticLoader) {
33
  require __DIR__ . '/autoload_static.php';
34
 
35
+ call_user_func(\Composer\Autoload\ComposerStaticInitb714294970ad2c2b58d4cffcbe1da5cb::getInitializer($loader));
36
  } else {
37
  $map = require __DIR__ . '/autoload_namespaces.php';
38
  foreach ($map as $namespace => $path) {
53
  $loader->register(true);
54
 
55
  if ($useStaticLoader) {
56
+ $includeFiles = Composer\Autoload\ComposerStaticInitb714294970ad2c2b58d4cffcbe1da5cb::$files;
57
  } else {
58
  $includeFiles = require __DIR__ . '/autoload_files.php';
59
  }
60
  foreach ($includeFiles as $fileIdentifier => $file) {
61
+ composerRequireb714294970ad2c2b58d4cffcbe1da5cb($fileIdentifier, $file);
62
  }
63
 
64
  return $loader;
65
  }
66
  }
67
 
68
+ function composerRequireb714294970ad2c2b58d4cffcbe1da5cb($fileIdentifier, $file)
69
  {
70
  if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
71
  require $file;
vendor/composer/autoload_static.php CHANGED
@@ -4,7 +4,7 @@
4
 
5
  namespace Composer\Autoload;
6
 
7
- class ComposerStaticInit453242ef73f85473c17b8233f473c31a
8
  {
9
  public static $files = array (
10
  'b45b351e6b6f7487d819961fef2fda77' => __DIR__ . '/..' . '/jakeasmith/http_build_url/src/http_build_url.php',
@@ -106,6 +106,7 @@ class ComposerStaticInit453242ef73f85473c17b8233f473c31a
106
  'WeDevs\\Dokan\\Product\\Hooks' => __DIR__ . '/../..' . '/includes/Product/Hooks.php',
107
  'WeDevs\\Dokan\\Product\\Manager' => __DIR__ . '/../..' . '/includes/Product/Manager.php',
108
  'WeDevs\\Dokan\\Product\\ProductCache' => __DIR__ . '/../..' . '/includes/Product/ProductCache.php',
 
109
  'WeDevs\\Dokan\\REST\\AdminDashboardController' => __DIR__ . '/../..' . '/includes/REST/AdminDashboardController.php',
110
  'WeDevs\\Dokan\\REST\\AdminMiscController' => __DIR__ . '/../..' . '/includes/REST/AdminMiscController.php',
111
  'WeDevs\\Dokan\\REST\\AdminNoticeController' => __DIR__ . '/../..' . '/includes/REST/AdminNoticeController.php',
@@ -211,9 +212,9 @@ class ComposerStaticInit453242ef73f85473c17b8233f473c31a
211
  public static function getInitializer(ClassLoader $loader)
212
  {
213
  return \Closure::bind(function () use ($loader) {
214
- $loader->prefixLengthsPsr4 = ComposerStaticInit453242ef73f85473c17b8233f473c31a::$prefixLengthsPsr4;
215
- $loader->prefixDirsPsr4 = ComposerStaticInit453242ef73f85473c17b8233f473c31a::$prefixDirsPsr4;
216
- $loader->classMap = ComposerStaticInit453242ef73f85473c17b8233f473c31a::$classMap;
217
 
218
  }, null, ClassLoader::class);
219
  }
4
 
5
  namespace Composer\Autoload;
6
 
7
+ class ComposerStaticInitb714294970ad2c2b58d4cffcbe1da5cb
8
  {
9
  public static $files = array (
10
  'b45b351e6b6f7487d819961fef2fda77' => __DIR__ . '/..' . '/jakeasmith/http_build_url/src/http_build_url.php',
106
  'WeDevs\\Dokan\\Product\\Hooks' => __DIR__ . '/../..' . '/includes/Product/Hooks.php',
107
  'WeDevs\\Dokan\\Product\\Manager' => __DIR__ . '/../..' . '/includes/Product/Manager.php',
108
  'WeDevs\\Dokan\\Product\\ProductCache' => __DIR__ . '/../..' . '/includes/Product/ProductCache.php',
109
+ 'WeDevs\\Dokan\\Product\\VendorStoreInfo' => __DIR__ . '/../..' . '/includes/Product/VendorStoreInfo.php',
110
  'WeDevs\\Dokan\\REST\\AdminDashboardController' => __DIR__ . '/../..' . '/includes/REST/AdminDashboardController.php',
111
  'WeDevs\\Dokan\\REST\\AdminMiscController' => __DIR__ . '/../..' . '/includes/REST/AdminMiscController.php',
112
  'WeDevs\\Dokan\\REST\\AdminNoticeController' => __DIR__ . '/../..' . '/includes/REST/AdminNoticeController.php',
212
  public static function getInitializer(ClassLoader $loader)
213
  {
214
  return \Closure::bind(function () use ($loader) {
215
+ $loader->prefixLengthsPsr4 = ComposerStaticInitb714294970ad2c2b58d4cffcbe1da5cb::$prefixLengthsPsr4;
216
+ $loader->prefixDirsPsr4 = ComposerStaticInitb714294970ad2c2b58d4cffcbe1da5cb::$prefixDirsPsr4;
217
+ $loader->classMap = ComposerStaticInitb714294970ad2c2b58d4cffcbe1da5cb::$classMap;
218
 
219
  }, null, ClassLoader::class);
220
  }