![]() Server : Apache/2.4.52 (Ubuntu) System : Linux webserver 6.8.0-49-generic #49~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Wed Nov 6 17:42:15 UTC 2 x86_64 User : www-data ( 33) PHP Version : 8.1.2-1ubuntu2.21 Disable Function : NONE Directory : /var/www/theprintave/wp-content/plugins/dokan-lite/includes/DummyData/ |
<?php namespace WeDevs\Dokan\DummyData; use \WP_Error; use \WP_Query; /** * Include dependencies. * * @since 3.6.2 */ if ( ! class_exists( 'WC_Product_Importer', false ) ) { include_once WC_ABSPATH . 'includes/import/abstract-wc-product-importer.php'; } if ( ! function_exists( 'wp_delete_user' ) ) { require_once ABSPATH . 'wp-admin/includes/user.php'; } /** * Dokan dummy data importer class. * * @since 3.6.2 */ class Importer extends \WC_Product_Importer { /** * Created or existing vendor id * * @var int */ private $vendor_id = null; public function __construct() { add_action( 'dokan_clear_dummy_data_vendor_orders', [ $this, 'delete_dummy_vendor_orders' ] ); } /** * Create and return dummy vendor or if exists return the existing vendor * * @since 3.6.2 * * @param array $data * * @return object|Vendor instance */ public function create_dummy_vendor( $data ) { $data['name'] = isset( $data['name'] ) ? sanitize_text_field( $data['name'] ) : ''; $data['featured'] = isset( $data['featured'] ) ? sanitize_text_field( $data['featured'] ) : ''; $data['description'] = isset( $data['description'] ) ? sanitize_text_field( $data['description'] ) : ''; $data['email'] = isset( $data['email'] ) ? sanitize_text_field( $data['email'] ) : ''; $data['user_pass'] = isset( $data['user_pass'] ) ? sanitize_text_field( $data['user_pass'] ) : ''; $data['store_name'] = isset( $data['store_name'] ) ? sanitize_text_field( $data['store_name'] ) : ''; $data['user_login'] = $data['store_name']; $data['social'] = isset( $data['social'] ) ? json_decode( sanitize_text_field( $data['social'] ), true ) : []; $data['payment'] = isset( $data['payment'] ) ? json_decode( sanitize_text_field( $data['payment'] ), true ) : []; $data['phone'] = isset( $data['phone'] ) ? sanitize_text_field( $data['phone'] ) : ''; $data['show_email'] = isset( $data['show_email'] ) ? sanitize_text_field( $data['show_email'] ) : ''; $data['address'] = isset( $data['address'] ) ? json_decode( sanitize_text_field( $data['address'] ), true ) : []; $data['location'] = isset( $data['location'] ) ? sanitize_text_field( $data['location'] ) : ''; $data['banner'] = isset( $data['banner'] ) ? sanitize_text_field( $data['banner'] ) : ''; $data['icon'] = isset( $data['icon'] ) ? sanitize_text_field( $data['icon'] ) : ''; $data['gravatar'] = isset( $data['gravatar'] ) ? sanitize_text_field( $data['gravatar'] ) : ''; $data['show_more_tpab'] = isset( $data['show_more_tpab'] ) ? sanitize_text_field( $data['show_more_tpab'] ) : ''; $data['show_ppp'] = isset( $data['show_ppp'] ) ? sanitize_text_field( $data['show_ppp'] ) : ''; $data['enable_tnc'] = isset( $data['enable_tnc'] ) ? sanitize_text_field( $data['enable_tnc'] ) : ''; $data['store_tnc'] = isset( $data['store_tnc'] ) ? sanitize_text_field( $data['store_tnc'] ) : ''; $data['show_min_order_discount'] = isset( $data['show_min_order_discount'] ) ? sanitize_text_field( $data['show_min_order_discount'] ) : ''; $data['store_seo'] = isset( $data['store_seo'] ) ? json_decode( sanitize_text_field( $data['store_seo'] ), true ) : ''; $data['dokan_store_time'] = isset( $data['dokan_store_time'] ) ? json_decode( sanitize_text_field( $data['dokan_store_time'] ), true ) : []; $data['enabled'] = isset( $data['enabled'] ) ? sanitize_text_field( $data['enabled'] ) : ''; $data['trusted'] = isset( $data['trusted'] ) ? sanitize_text_field( $data['trusted'] ) : ''; $existing_user = get_user_by( 'slug', $data['store_name'] ); if ( ! $existing_user ) { $existing_user = get_user_by( 'login', $data['store_name'] ); } if ( $existing_user ) { $current_vendor = dokan()->vendor->get( $existing_user ); } else { $current_vendor = dokan()->vendor->create( $data ); } add_user_meta( $current_vendor->id, 'dokan_dummy_data', true, true ); return $current_vendor; } /** * Creates dummy vendors and products. * * @since 3.6.2 * * @param int $vendor_id * @param array $products * * @return array */ public function create_dummy_products_for_vendor( $vendor_id, $products ) { foreach ( $products as $product_key => $product ) { $products[ $product_key ]['category_ids'] = $this->formate_product_categories_or_tags( $product, 'product_cat', 'category_ids' ); $products[ $product_key ]['tag_ids'] = $this->formate_product_categories_or_tags( $product, 'product_tag', 'tag_ids' ); $products[ $product_key ]['raw_gallery_image_ids'] = $this->formate_string_by_separator( $product['raw_gallery_image_ids'] ); } $this->parsed_data = $products; $this->vendor_id = $vendor_id; return $this->import(); } /** * Formats category / tags ids for products * * @since 3.6.2 * * @param array $value * * @return array */ private function formate_product_categories_or_tags( $value, $taxonomy, $category_or_tag ) { $all_category_or_tags = $this->formate_string_by_separator( $value[ $category_or_tag ] ); $all_ids = []; foreach ( $all_category_or_tags as $item ) { $term = term_exists( $item, $taxonomy ); if ( ! $term && ! empty( $item ) ) { $term = wp_insert_term( $item, $taxonomy ); } elseif ( empty( $item ) ) { continue; } array_push( $all_ids, $term['term_id'] ); } return $all_ids; } /** * Formats string by a separator * * @since 3.6.2 * * @param string $data * * @param string $separator * * @return array */ private function formate_string_by_separator( $data = '', $separator = ',' ) { return explode( $separator, $data ); } /** * Process importer. * * Do not import products with IDs or SKUs that already exist if option * update existing is false, and likewise, if updating products, do not * process rows which do not exist if an SKU is provided. * * @since 3.6.2 * * @return array */ public function import() { $index = 0; $update_existing = false; $data = array( 'imported' => array(), 'failed' => array(), 'updated' => array(), 'skipped' => array(), ); foreach ( $this->parsed_data as $parsed_data_key => $parsed_data ) { unset( $parsed_data['id'] ); $sku = isset( $parsed_data['sku'] ) ? $parsed_data['sku'] : ''; $sku_exists = false; if ( $sku ) { $id_from_sku = wc_get_product_id_by_sku( $sku ); $product = $id_from_sku ? wc_get_product( $id_from_sku ) : false; $sku_exists = $product ? true : false; } if ( $sku_exists && ! $this->is_my_product( $product ) ) { $data['skipped'][] = new WP_Error( 'woocommerce_product_importer_error', __( 'A product with this SKU already exists in another vendor.', 'dokan-lite' ), array( 'sku' => $sku, 'item' => $parsed_data, ) ); continue; } if ( $sku_exists && ! $update_existing ) { $data['skipped'][] = new WP_Error( 'woocommerce_product_importer_error', esc_html__( 'A product with this SKU already exists.', 'dokan-lite' ), array( 'sku' => esc_attr( $sku ), 'item' => $parsed_data, ) ); continue; } if ( $update_existing && isset( $parsed_data['sku'] ) && ! $sku_exists ) { $data['skipped'][] = new WP_Error( 'woocommerce_product_importer_error', esc_html__( 'No matching product exists to update.', 'dokan-lite' ), array( 'sku' => esc_attr( $sku ), 'item' => $parsed_data, ) ); continue; } $result = $this->process_item( $parsed_data ); if ( is_wp_error( $result ) ) { $data['failed'][] = [ 'error_data' => $result->get_error_message(), 'item' => $parsed_data, ]; } elseif ( $result['updated'] ) { $data['updated'][] = $result['id']; } else { $data['imported'][] = $result['id']; add_post_meta( $result['id'], 'dokan_dummy_data', true, true ); wp_update_post( array( 'ID' => $result['id'], 'post_author' => $this->vendor_id, ) ); } $index ++; } return $data; } /** * Check if the product is from my store * * @param int|WC_Product $product * * @return bool */ private function is_my_product( $product ) { return $this->vendor_id === dokan_get_vendor_by_product( $product, true ); } /** * Remove all dummy data ( products and vendors ) that has 'dokan_dummy_data' meta key * * @since 3.6.2 * * @return string */ public function clear_all_dummy_data() { $args = [ 'post_type' => 'product', 'posts_per_page' => - 1, 'post_status' => 'any', 'fields' => 'ids', 'meta_key' => 'dokan_dummy_data', 'meta_value' => '1' ]; $query = new WP_Query( $args ); $all_products = $query->posts; foreach ( $all_products as $product_id ) { wp_delete_post( $product_id, true ); } $all_vendors = dokan()->vendor->get_vendors( array( 'role__in' => [ 'seller' ], 'meta_key' => 'dokan_dummy_data', // phpcs:ignore ) ); foreach ( $all_vendors as $vendor ) { wp_delete_user( $vendor->id ); $task_args = [ 'task' => 'clear_dummy_vendors_orders', 'vendor_id' => $vendor->id, ]; WC()->queue()->add( 'dokan_clear_dummy_data_vendor_orders', [ $task_args ] ); } return __( 'Cleared all dummy data successfully.', 'dokan-lite' ); } /** * Delete orders data of a dummy vendors from database. * * @since 3.6.2 * * @param array $args * * @return void */ public function delete_dummy_vendor_orders( $args ) { // Validating args. if ( ! isset( $args['task'] ) || 'clear_dummy_vendors_orders' !== $args['task'] ) { return; } $vendor_id = isset( $args['vendor_id'] ) ? $args['vendor_id'] : ''; if ( empty( $vendor_id ) ) { return; } $orders = dokan()->order->all( [ 'seller_id' => $vendor_id, 'return' => 'objects' ] ); // Deleting vendors orders. foreach ( $orders as $order ) { $order->delete( true ); } global $wpdb; // Deleting orders from dokan orders table. $wpdb->delete( $wpdb->prefix . 'dokan_orders', [ 'seller_id' => $vendor_id ], [ '%d' ] ); // Deleting orders from dokan vendors balance table. $wpdb->delete( $wpdb->prefix . 'dokan_vendor_balance', [ 'vendor_id' => $vendor_id ], [ '%d' ] ); // Deleting orders from dokan withdraw table. $wpdb->delete( $wpdb->prefix . 'dokan_withdraw', [ 'user_id' => $vendor_id ], [ '%d' ] ); } }