From 84b42872798e65e4df3282fc3d2ab6a649d6f5d1 Mon Sep 17 00:00:00 2001 From: Nurul Umbhiya Date: Fri, 12 May 2023 16:21:38 +0600 Subject: [PATCH 01/16] new: Added two new hooks named dokan_order_listing_header_before_action_column and dokan_order_listing_row_before_action_field --- templates/orders/listing.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/templates/orders/listing.php b/templates/orders/listing.php index 0cde670416..c5247d6f7b 100755 --- a/templates/orders/listing.php +++ b/templates/orders/listing.php @@ -36,6 +36,7 @@ + @@ -130,6 +131,7 @@ get_id() ); ?> + Date: Mon, 22 May 2023 09:16:22 +0600 Subject: [PATCH 02/16] update: separate shipping tax from total tax (#1848) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * update: added shipping tax fee recipient admin settings `shipping_tax_fee_recipient` * phpunit: fix the phpunit setup * phpunit: fix directory selection and exclude * update: shipping tax fee recipient admin settings support added * refactor: phpcs fix * fix: settings group * update: upgrader added to Update existing order meta * 📝 docs(Settings.php): update descriptions for shipping_fee_recipient, tax_fee_recipient, and shipping_tax_fee_recipient options in Settings class * 📝 docs(Settings.php): update description of shipping_fee_recipient field 🐛 fix(Commission.php): fix variable name and add backward compatibility for shipping_tax_fee_recipient meta data * refactor: changed upgrader versions to 3.7.19 --------- Co-authored-by: Nurul Umbhiya --- .gitignore | 1 + composer.json | 4 +- includes/Admin/Settings.php | 17 ++++- includes/Commission.php | 65 +++++++++++++++-- includes/Upgrade/Upgrades.php | 1 + .../V_3_7_19_UpdateOrderMeta.php | 46 +++++++++++++ includes/Upgrade/Upgrades/V_3_7_19.php | 39 +++++++++++ phpunit.xml | 6 +- tests/bootstrap.php | 10 +-- tests/phpunit-wp-config.php | 69 +++++++++++++++++++ tests/test-commission.php | 8 +-- tests/test-sample.php | 7 +- tests/test-seller.php | 12 ++-- tests/test-shipping.php | 8 +-- 14 files changed, 254 insertions(+), 39 deletions(-) create mode 100644 includes/Upgrade/Upgrades/BackgroundProcesses/V_3_7_19_UpdateOrderMeta.php create mode 100644 includes/Upgrade/Upgrades/V_3_7_19.php create mode 100644 tests/phpunit-wp-config.php diff --git a/.gitignore b/.gitignore index fb0f9c0d9a..150f75c86a 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,4 @@ config.json /vendor/ phpcs-report.txt /phpcs.xml +.phpunit.result.cache diff --git a/composer.json b/composer.json index 2556dd330a..51b0917766 100644 --- a/composer.json +++ b/composer.json @@ -20,7 +20,9 @@ "dealerdirect/phpcodesniffer-composer-installer": "^0.7.2", "tareq1988/wp-php-cs-fixer": "dev-master", "phpcompatibility/phpcompatibility-wp": "dev-master", - "phpunit/phpunit": "^8.5.31" + "phpunit/phpunit": "^8.5.31", + "wp-phpunit/wp-phpunit": "dev-master", + "yoast/phpunit-polyfills": "^1.0@dev" }, "config": { "platform": { diff --git a/includes/Admin/Settings.php b/includes/Admin/Settings.php index 264422f0e1..c216013bff 100644 --- a/includes/Admin/Settings.php +++ b/includes/Admin/Settings.php @@ -490,7 +490,7 @@ public function get_settings_fields() { 'shipping_fee_recipient' => [ 'name' => 'shipping_fee_recipient', 'label' => __( 'Shipping Fee Recipient', 'dokan-lite' ), - 'desc' => __( 'Who will be receiving the shipping fees', 'dokan-lite' ), + 'desc' => __( 'Who will be receiving the shipping fees? Note that, tax fees for corresponding shipping method will not be included with shipping fees.', 'dokan-lite' ), 'type' => 'radio', 'options' => [ 'seller' => __( 'Vendor', 'dokan-lite' ), @@ -500,8 +500,19 @@ public function get_settings_fields() { ], 'tax_fee_recipient' => [ 'name' => 'tax_fee_recipient', - 'label' => __( 'Tax Fee Recipient', 'dokan-lite' ), - 'desc' => __( 'Who will be receiving the tax fees', 'dokan-lite' ), + 'label' => __( 'Product Tax Fee Recipient', 'dokan-lite' ), + 'desc' => __( 'Who will be receiving the tax fees for products? Note that, shipping tax fees will not be included with product tax.', 'dokan-lite' ), + 'type' => 'radio', + 'options' => [ + 'seller' => __( 'Vendor', 'dokan-lite' ), + 'admin' => __( 'Admin', 'dokan-lite' ), + ], + 'default' => 'seller', + ], + 'shipping_tax_fee_recipient' => [ + 'name' => 'shipping_tax_fee_recipient', + 'label' => __( 'Shipping Tax Fee Recipient', 'dokan-lite' ), + 'desc' => __( 'Who will be receiving the tax fees for shipping?', 'dokan-lite' ), 'type' => 'radio', 'options' => [ 'seller' => __( 'Vendor', 'dokan-lite' ), diff --git a/includes/Commission.php b/includes/Commission.php index 8444e2e6c2..96fd73da18 100644 --- a/includes/Commission.php +++ b/includes/Commission.php @@ -212,11 +212,12 @@ public function get_earning_by_product( $product, $context = 'seller', $price = * Get earning by order * * @since 2.9.21 + * @since DOKAN_SINCE Shipping tax recipient support added. * - * @param int|WC_Order $order + * @param int|\WC_Order $order Order. * @param string $context * - * @return float|null on failure + * @return float|void|\WP_Error|null on failure */ public function get_earning_by_order( $order, $context = 'seller' ) { if ( ! $order instanceof \WC_Order ) { @@ -277,7 +278,11 @@ public function get_earning_by_order( $order, $context = 'seller' ) { } if ( $context === $this->get_tax_fee_recipient( $order->get_id() ) ) { - $earning += $order->get_total_tax() - $order->get_total_tax_refunded(); + $earning += ( ( $order->get_total_tax() - $order->get_total_tax_refunded() ) - ( $order->get_shipping_tax() - $this->get_total_shipping_tax_refunded( $order ) ) ); + } + + if ( $context === $this->get_shipping_tax_fee_recipient( $order ) ) { + $earning += ( $order->get_shipping_tax() - $this->get_total_shipping_tax_refunded( $order ) ); } $earning = apply_filters_deprecated( 'dokan_order_admin_commission', [ $earning, $order, $context ], '2.9.21', 'dokan_get_earning_by_order' ); @@ -733,7 +738,7 @@ public function get_shipping_fee_recipient( $order_id ) { if ( $saved_shipping_recipient ) { $shipping_recipient = $saved_shipping_recipient; } else { - $shipping_recipient = apply_filters( 'dokan_shipping_fee_recipient', dokan_get_option( 'shipping_fee_recipient', 'dokan_general', 'seller' ), $order_id ); + $shipping_recipient = apply_filters( 'dokan_shipping_fee_recipient', dokan_get_option( 'shipping_fee_recipient', 'dokan_selling', 'seller' ), $order_id ); update_post_meta( $order_id, 'shipping_fee_recipient', $shipping_recipient ); } @@ -756,13 +761,63 @@ public function get_tax_fee_recipient( $order_id ) { if ( $saved_tax_recipient ) { $tax_recipient = $saved_tax_recipient; } else { - $tax_recipient = apply_filters( 'dokan_tax_fee_recipient', dokan_get_option( 'tax_fee_recipient', 'dokan_general', 'seller' ), $order_id ); + $tax_recipient = apply_filters( 'dokan_tax_fee_recipient', dokan_get_option( 'tax_fee_recipient', 'dokan_selling', 'seller' ), $order_id ); update_post_meta( $order_id, 'tax_fee_recipient', $tax_recipient ); } return $tax_recipient; } + /** + * Get shipping tax fee recipient. + * + * @since DOKAN_SINCE + * + * @param \WC_Order $order Order. + * + * @return string + */ + public function get_shipping_tax_fee_recipient( $order ): string { + // get saved tax recipient + $saved_shipping_tax_recipient = $order->get_meta( 'shipping_tax_fee_recipient', true ); + if ( ! empty( $saved_shipping_tax_recipient ) ) { + return $saved_shipping_tax_recipient; + } + + $default_tax_fee_recipient = $this->get_tax_fee_recipient( $order->get_id() ); // this is needed for backward compatibility + $shipping_tax_recipient = dokan_get_option( 'shipping_tax_fee_recipient', 'dokan_selling', $default_tax_fee_recipient ); + $shipping_tax_recipient = apply_filters( 'dokan_shipping_tax_fee_recipient', $shipping_tax_recipient, $order->get_id() ); + + $order->add_meta_data( 'shipping_tax_fee_recipient', $shipping_tax_recipient, true ); + $order->save(); + + return $shipping_tax_recipient; + } + + /** + * Get total shipping tax refunded for the order. + * + * @since DOKAN_SINCE + * + * @param \WC_Order $order Order. + * + * @return float + */ + public function get_total_shipping_tax_refunded( \WC_Order $order ): float { + $tax_refunded = 0.0; + + foreach ( $order->get_items( 'shipping' ) as $item_id => $item ) { + /** + * @var \WC_Order_Item_Shipping $item Shipping item. + */ + foreach ( $item->get_taxes()['total'] as $tax_id => $tax_amount ) { + $tax_refunded += $order->get_tax_refunded_for_item( $item->get_id(), $tax_id, 'shipping' ); + } + } + + return $tax_refunded; + } + /** * Get processing fee * diff --git a/includes/Upgrade/Upgrades.php b/includes/Upgrade/Upgrades.php index a60098c96f..f12d269472 100644 --- a/includes/Upgrade/Upgrades.php +++ b/includes/Upgrade/Upgrades.php @@ -42,6 +42,7 @@ class Upgrades { '3.6.4' => Upgrades\V_3_6_4::class, '3.6.5' => Upgrades\V_3_6_5::class, '3.7.10' => Upgrades\V_3_7_10::class, + '3.7.19' => Upgrades\V_3_7_19::class, ]; /** diff --git a/includes/Upgrade/Upgrades/BackgroundProcesses/V_3_7_19_UpdateOrderMeta.php b/includes/Upgrade/Upgrades/BackgroundProcesses/V_3_7_19_UpdateOrderMeta.php new file mode 100644 index 0000000000..033b9f912f --- /dev/null +++ b/includes/Upgrade/Upgrades/BackgroundProcesses/V_3_7_19_UpdateOrderMeta.php @@ -0,0 +1,46 @@ +get_meta( 'has_sub_order' ) ) ) { + continue; + } + + $saved_shipping_tax_recipient = $order->get_meta( 'shipping_tax_fee_recipient' ); + $saved_tax_recipient = $order->get_meta( 'tax_fee_recipient' ); + + if ( empty( $saved_shipping_tax_recipient ) ) { + $order->add_meta_data( 'shipping_tax_fee_recipient', $saved_tax_recipient, true ); + } + } + + return false; + } +} diff --git a/includes/Upgrade/Upgrades/V_3_7_19.php b/includes/Upgrade/Upgrades/V_3_7_19.php new file mode 100644 index 0000000000..605b8b7850 --- /dev/null +++ b/includes/Upgrade/Upgrades/V_3_7_19.php @@ -0,0 +1,39 @@ + true, + 'limit' => 20, + 'paged' => $i, + ); + + $results = wc_get_orders( $args ); + + $processor->push_to_queue( $results->orders ); + + ++$i; + } while ( $i <= $results->max_num_pages ); + + $processor->dispatch_process(); + } +} diff --git a/phpunit.xml b/phpunit.xml index 9dcc980411..127a798d76 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -6,9 +6,13 @@ convertNoticesToExceptions="true" convertWarningsToExceptions="true" > + + + - ./tests/ + ./tests/ + ./tests/phpunit-wp-config.php diff --git a/tests/bootstrap.php b/tests/bootstrap.php index 7b6f46b82b..037427ae54 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -1,6 +1,8 @@ create_vendor(); $this->create_product(); @@ -145,10 +145,6 @@ public function setUp() { add_filter( 'dokan_prepare_for_calculation', [ $this, 'dokan_add_combine_commission' ], 10, 8 ); } - public function tearDown() { - parent::tearDown(); - } - /** * Set global settings * diff --git a/tests/test-sample.php b/tests/test-sample.php index 8633959f6a..054bb3ff2b 100644 --- a/tests/test-sample.php +++ b/tests/test-sample.php @@ -2,15 +2,12 @@ class SampleTest extends WP_UnitTestCase { - public function setup() { - parent::setup(); + public function set_up() { + parent::set_up(); $_SERVER['REMOTE_ADDR'] = '127.0.0.1'; } - public function tearDown() { - parent::tearDown(); - } public function test_order() { $order = wc_create_order( [ 'customer_id' => 1 ] ); diff --git a/tests/test-seller.php b/tests/test-seller.php index 2636667189..83749a12f8 100644 --- a/tests/test-seller.php +++ b/tests/test-seller.php @@ -6,24 +6,20 @@ class Dokan_Test_Seller extends WP_UnitTestCase { private $seller_two = 0; - public function setup() { - parent::setup(); + public function set_up() { + parent::set_up(); $this->create_sellers(); } - public function tearDown() { - parent::tearDown(); - } - public function create_sellers() { - $this->seller_one = $this->factory->user->create( [ + $this->seller_one = $this->factory()->user->create( [ 'role' => 'seller', 'user_login' => 'seller_one', 'description' => 'seller_one', ] ); - $this->seller_two = $this->factory->user->create( [ + $this->seller_two = $this->factory()->user->create( [ 'role' => 'seller', 'user_login' => 'seller_two', 'description' => 'seller_two', diff --git a/tests/test-shipping.php b/tests/test-shipping.php index 908384b7eb..fb26904d56 100644 --- a/tests/test-shipping.php +++ b/tests/test-shipping.php @@ -2,12 +2,8 @@ class Dokan_Test_Shipping extends WP_UnitTestCase { - public function setup() { - parent::setup(); - } - - public function tearDown() { - parent::tearDown(); + public function set_up() { + parent::set_up(); } public function testSample() { From 1e5fa11529d387393a4ccc4849914b5c125da619 Mon Sep 17 00:00:00 2001 From: Shazahanul Islam Shohag Date: Mon, 22 May 2023 10:23:27 +0600 Subject: [PATCH 03/16] update: Multiple shipping line item support added (#1859) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * update: Multiple shipping lineitem support added * update: depricated `dokan_shipping_method` filter * 🐛 fix(Manager.php): add array_filter to remove empty elements from applied_shipping_methods array ✨ feat(Manager.php): add DOKAN_SINCE constant to replace hardcoded version number in apply_filters_deprecated call 🐛 fix(Manager.php): fix adding shipping items to order when shipping method is not an instance of WC_Order_Item_Shipping class --------- Co-authored-by: Nurul Umbhiya --- includes/Order/Manager.php | 50 ++++++++++++++++++++++++++------------ 1 file changed, 34 insertions(+), 16 deletions(-) diff --git a/includes/Order/Manager.php b/includes/Order/Manager.php index 2af667899d..b2e5831249 100644 --- a/includes/Order/Manager.php +++ b/includes/Order/Manager.php @@ -410,9 +410,14 @@ public function create_taxes( $order, $parent_order, $products ) { $tax_total += $item->get_total_tax(); } - foreach ( $parent_order->get_taxes() as $tax ) { - $seller_shipping = reset( $shipping ); + $seller_shipping_total_taxes = array_map( + function ( $item ) { + return $item->get_total_tax(); + }, + $shipping + ); + foreach ( $parent_order->get_taxes() as $tax ) { $item = new \WC_Order_Item_Tax(); $item->set_props( array( @@ -421,7 +426,7 @@ public function create_taxes( $order, $parent_order, $products ) { 'compound' => $tax->get_compound(), 'rate_code' => \WC_Tax::get_rate_code( $tax->get_rate_id() ), 'tax_total' => $tax_total, - 'shipping_tax_total' => is_bool( $seller_shipping ) ? '' : $seller_shipping->get_total_tax(), + 'shipping_tax_total' => empty( $seller_shipping_total_taxes ) ? '' : array_sum( $seller_shipping_total_taxes ), ) ); @@ -446,33 +451,47 @@ public function create_shipping( $order, $parent_order ) { $shipping_methods = $parent_order->get_shipping_methods(); $order_seller_id = (int) dokan_get_seller_id_by_order( $order->get_id() ); - $applied_shipping_method = ''; + $applied_shipping_methods = []; if ( $shipping_methods ) { foreach ( $shipping_methods as $method_item_id => $shipping_object ) { $shipping_seller_id = (int) wc_get_order_item_meta( $method_item_id, 'seller_id', true ); if ( $order_seller_id === $shipping_seller_id ) { - $applied_shipping_method = $shipping_object; - break; + $applied_shipping_methods[] = $shipping_object; } } + $applied_shipping_methods = array_filter( $applied_shipping_methods ); } - $shipping_method = apply_filters( 'dokan_shipping_method', $applied_shipping_method, $order->get_id(), $parent_order ); + $applied_shipping_methods[0] = apply_filters_deprecated( + 'dokan_shipping_method', + [ + $applied_shipping_methods[0] ?? '', + $order->get_id(), + $parent_order, + ], + 'DOKAN_SINCE', + 'dokan_shipping_methods' + ); + + $shipping_methods = apply_filters( 'dokan_shipping_methods', $applied_shipping_methods, $order->get_id(), $parent_order ); // bail out if no shipping methods found - if ( ! $shipping_method ) { + if ( empty( $shipping_methods ) ) { dokan_log( sprintf( '#%d - No shipping method found. Aborting.', $order->get_id() ) ); return; } - if ( is_a( $shipping_method, 'WC_Order_Item_Shipping' ) ) { - $item = new \WC_Order_Item_Shipping(); - + $shipping_totals = 0.0; + foreach ( $shipping_methods as $shipping_method ) { + if ( ! is_a( $shipping_method, 'WC_Order_Item_Shipping' ) ) { + continue; + } dokan_log( sprintf( '#%d - Adding shipping item.', $order->get_id() ) ); + $item = new \WC_Order_Item_Shipping(); $item->set_props( array( 'method_title' => $shipping_method->get_name(), @@ -481,19 +500,18 @@ public function create_shipping( $order, $parent_order ) { 'taxes' => $shipping_method->get_taxes(), ) ); - - $metadata = $shipping_method->get_meta_data(); + $shipping_totals += $shipping_method->get_total(); + $metadata = $shipping_method->get_meta_data(); if ( $metadata ) { foreach ( $metadata as $meta ) { $item->add_meta_data( $meta->key, $meta->value ); } } - $order->add_item( $item ); - $order->set_shipping_total( $shipping_method->get_total() ); - $order->save(); } + $order->set_shipping_total( $shipping_totals ); + $order->save(); } /** From 6e660155cd9f12b46dc186c22bfaf01e159c937a Mon Sep 17 00:00:00 2001 From: Shazahanul Islam Shohag Date: Mon, 22 May 2023 11:20:45 +0600 Subject: [PATCH 04/16] update: Cart Shipping split support (#1862) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * update: Shipping split support * 🚀 feat(dokan.php): add shipping hooks to Dokan class ✨ feat(Shipping/Hooks.php): add shipping hooks class with split_shipping_packages, add_shipping_pack_meta, and change_shipping_pack_name functions ♻️ refactor(wc-functions.php): remove unused shipping-related functions and filters --------- Co-authored-by: Nurul Umbhiya --- dokan.php | 1 + includes/Shipping/Hooks.php | 117 ++++++++++++++++++++++++++++++++++++ 2 files changed, 118 insertions(+) create mode 100644 includes/Shipping/Hooks.php diff --git a/dokan.php b/dokan.php index d9d8edadc0..da5aeef474 100755 --- a/dokan.php +++ b/dokan.php @@ -353,6 +353,7 @@ public function init_classes() { new \WeDevs\Dokan\Upgrade\Hooks(); new \WeDevs\Dokan\Vendor\UserSwitch(); new \WeDevs\Dokan\CacheInvalidate(); + new \WeDevs\Dokan\Shipping\Hooks(); if ( is_admin() ) { new \WeDevs\Dokan\Admin\Hooks(); diff --git a/includes/Shipping/Hooks.php b/includes/Shipping/Hooks.php new file mode 100644 index 0000000000..e84af6e1c5 --- /dev/null +++ b/includes/Shipping/Hooks.php @@ -0,0 +1,117 @@ +is_pro_exists() ) { + // todo: permanently move below hooks from dokan pro after a couple of release, we are moving shipping split feature to free version. + add_filter( 'woocommerce_cart_shipping_packages', [ $this, 'split_shipping_packages' ] ); + add_action( 'woocommerce_checkout_create_order_shipping_item', [ $this, 'add_shipping_pack_meta' ], 10, 4 ); + add_filter( 'woocommerce_shipping_package_name', [ $this, 'change_shipping_pack_name' ], 10, 3 ); + } + } + + /** + * Split shipping seller wise + * + * @since DOKAN_SINCE Moved from pro. + * + * @param array $packages + * + * @return array + */ + public function split_shipping_packages( $packages ) { + $cart_content = WC()->cart->get_cart(); + $seller_pack = []; + $packages = []; + + foreach ( $cart_content as $key => $item ) { + $post_author = get_post_field( 'post_author', $item['data']->get_id() ); + + $seller_pack[ $post_author ][ $key ] = $item; + } + + foreach ( $seller_pack as $seller_id => $pack ) { + $packages[] = [ + 'contents' => $pack, + 'contents_cost' => array_sum( wp_list_pluck( $pack, 'line_total' ) ), + 'applied_coupons' => WC()->cart->get_applied_coupons(), + 'user' => [ + 'ID' => get_current_user_id(), + ], + 'seller_id' => $seller_id, + 'destination' => [ + 'country' => WC()->customer->get_shipping_country(), + 'state' => WC()->customer->get_shipping_state(), + 'postcode' => WC()->customer->get_shipping_postcode(), + 'city' => WC()->customer->get_shipping_city(), + 'address' => WC()->customer->get_shipping_address(), + 'address_2' => WC()->customer->get_shipping_address_2(), + ], + ]; + } + + return apply_filters( 'dokan_cart_shipping_packages', $packages ); + } + + /** + * Added shipping meta after order + * + * @since DOKAN_SINCE Moved from pro. + * + * @param WC_Order_Item_Shipping $item Shipping Line Item. + * @param string $package_key Package key. + * @param array $package Package. + * @param WC_Order $order Order. + * + * @return void + */ + public function add_shipping_pack_meta( $item, $package_key, $package, $order ) { + $item->add_meta_data( 'seller_id', $package['seller_id'], true ); + } + + /** + * Set package wise seller name + * + * @since DOKAN_SINCE Moved from pro. + * + * @param string $title Existing shipping pack name. + * @param integer $i Pack ID. + * @param array $package Shipping Package. + * + * @return string + */ + public function change_shipping_pack_name( $title, $i, $package ) { + $user_id = $package['seller_id']; + + if ( empty( $user_id ) ) { + return $title; + } + + if ( is_array( $user_id ) ) { + $user_id = reset( $user_id ); + } + + $vendor = dokan()->vendor->get( $user_id ); + $shipping_label = sprintf( '%s %s', __( 'Shipping: ', 'dokan-lite' ), $vendor->get_shop_name() ); + + return apply_filters( 'dokan_shipping_package_name', $shipping_label, $i, $package, $vendor ); + } +} From 856fa78bff24be038ca9287a232137e18cec0785 Mon Sep 17 00:00:00 2001 From: Aunshon <32583103+Aunshon@users.noreply.github.com> Date: Mon, 22 May 2023 13:29:48 +0600 Subject: [PATCH 05/16] Fix/vendor profile image css (#1873) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * css fix * css fix * ⚡️Refactor code --- src/admin/components/UploadImage.vue | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/admin/components/UploadImage.vue b/src/admin/components/UploadImage.vue index c34de6f537..6ecb5b618b 100644 --- a/src/admin/components/UploadImage.vue +++ b/src/admin/components/UploadImage.vue @@ -1,8 +1,10 @@