get_param( 'search' ) ? sanitize_text_field( $request->get_param( 'search' ) ) : ''; $search_category = $request->get_param( 'wcfmmp_store_category' ) ? sanitize_text_field( $request->get_param( 'wcfmmp_store_category' ) ) : ''; $paged = $request->get_param( 'page' ) ? absint( $request->get_param( 'page' ) ) : 1; $per_page = $request->get_param( 'per_page' ) ? absint( $request->get_param( 'per_page' ) ) : 10; $includes = $request->get_param( 'includes' ) ? sanitize_text_field( $request->get_param( 'includes' ) ) : ''; $excludes = $request->get_param( 'excludes' ) ? sanitize_text_field( $request->get_param( 'excludes' ) ) : ''; $has_product = $request->get_param( 'has_product' ) ? sanitize_text_field( $request->get_param( 'has_product' ) ) : ''; $units = $request->get_param( 'units' ) ? sanitize_text_field( $request->get_param( 'units' ) ) : 'metric'; $search_data = array(); $length = absint( $per_page ); $offset = ( $paged - 1 ) * $length; $search_data['excludes'] = $excludes; if ( $includes ) { $includes = explode( ',', $includes ); } else { $includes = array(); } $wcfmmp_radius_lat = $request->get_param( 'wcfmmp_radius_lat' ); $wcfmmp_radius_lng = $request->get_param( 'wcfmmp_radius_lng' ); $wcfmmp_radius_range = $request->get_param( 'wcfmmp_radius_range' ); if ( $wcfmmp_radius_lat && $wcfmmp_radius_lng && $wcfmmp_radius_range ) { $search_data['wcfmmp_radius_lat'] = $wcfmmp_radius_lat; $search_data['wcfmmp_radius_lng'] = $wcfmmp_radius_lng; $search_data['wcfmmp_radius_range'] = $wcfmmp_radius_range; } $stores = $WCFMmp->wcfmmp_vendor->wcfmmp_search_vendor_list( true, $offset, $length, $search_term, $search_category, $search_data, $has_product, $includes ); $response = array(); $index = 0; foreach ( $stores as $wcfm_vendors_id => $wcfm_vendors_name ) { $response[ $index ] = $this->get_formatted_item_data( $wcfm_vendors_id, array(), $wcfm_vendors_name, null, null ); $index++; } return apply_filters( 'wcfmapi_rest_prepare_store_vendors_objects', $response, $request ); } public function flutter_get_wcfm_stores_by_id( $wcfm_vendors_id ) { $wcfm_vendors_json_arr = array(); $response = $this->get_formatted_item_data( $wcfm_vendors_id, $wcfm_vendors_json_arr, null, null, null ); return rest_ensure_response( $response ); } public function get_formatted_item_data( $wcfm_vendors_id, $wcfm_vendors_json_arr, $wcfm_vendors_name, $filter_date_form, $filter_date_to ) { global $WCFM; if ( is_plugin_active( 'wcfm-marketplace-rest-api/wcfm-marketplace-rest-api.php' ) ) { $store_vendorController = new WCFM_REST_Store_Vendors_Controller(); $vendorData = $store_vendorController->get_formatted_item_data( $wcfm_vendors_id ); if ( ! is_wp_error( $vendorData ) && is_array( $vendorData ) ) { $wcfm_vendors_json_arr = $vendorData; } } $admin_fee_mode = apply_filters( 'wcfm_is_admin_fee_mode', false ); $price_decimal = get_option( 'woocommerce_price_num_decimals', 2 ); $report_for = 'month'; $wcfm_vendors_json_arr['vendor_id'] = $wcfm_vendors_id; $wcfm_vendors_json_arr['vendor_display_name'] = $wcfm_vendors_name; $wcfm_vendors_json_arr['vendor_shop_name'] = $WCFM->wcfm_vendor_support->wcfm_get_vendor_store_name_by_vendor( $wcfm_vendors_id ); $store_user = wcfmmp_get_store( absint( $wcfm_vendors_id ) ); $email = $store_user->get_email(); $phone = $store_user->get_phone(); $address = $store_user->get_address_string(); if ( $email ) { $wcfm_vendors_json_arr['vendor_email'] = $email; } if ( $address ) { $wcfm_vendors_json_arr['vendor_address'] = $address; } if ( $phone ) { $wcfm_vendors_json_arr['vendor_phone'] = $phone; } $wcfm_vendors_json_arr['vendor_shop_name'] = $WCFM->wcfm_vendor_support->wcfm_get_vendor_store_name_by_vendor( $wcfm_vendors_id ); $disable_vendor = get_user_meta( $wcfm_vendors_id, '_disable_vendor', true ); $is_store_offline = get_user_meta( $wcfm_vendors_id, '_wcfm_store_offline', true ); $wcfm_vendors_json_arr['disable_vendor'] = $disable_vendor == '1'; $wcfm_vendors_json_arr['is_store_offline'] = $is_store_offline; if ( apply_filters( 'wcfm_is_allow_email_verification', true ) ) { $email_verified = false; $vendor_user = get_userdata( $wcfm_vendors_id ); $user_email = $vendor_user->user_email; $email_verified = get_user_meta( $wcfm_vendors_id, '_wcfm_email_verified', true ); $wcfm_email_verified_for = get_user_meta( $wcfm_vendors_id, '_wcfm_email_verified_for', true ); if ( $email_verified && ( $user_email != $wcfm_email_verified_for ) ) { $email_verified = false; } $wcfm_vendors_json_arr['email_verified'] = $email_verified; } // $wcfm_vendors_json_arr['additional_data'] = apply_filters( 'wcfm_vendors_additonal_data', '–', $wcfm_vendors_id ); $vendor_id = $wcfm_vendors_id; $vendor_settings = $this->get_vendor_settings_by_id( $vendor_id ); $wcfm_vendors_json_arr['settings'] = $vendor_settings; $wcfmvm_registration_custom_fields = get_option( 'wcfmvm_registration_custom_fields', array() ); $wcfmvm_custom_infos = get_user_meta( $vendor_id, 'wcfmvm_custom_infos', true ); $wcfm_vendors_json_arr['vendor_additional_info'] = array(); if ( ! empty( $wcfmvm_registration_custom_fields ) ) { foreach ( $wcfmvm_registration_custom_fields as $key => $wcfmvm_registration_custom_field ) { $wcfmvm_registration_custom_field['name'] = sanitize_title( $wcfmvm_registration_custom_field['label'] ); if ( ! empty( $wcfmvm_custom_infos ) ) { if ( $wcfmvm_registration_custom_field['type'] == 'checkbox' ) { $field_value = isset( $wcfmvm_custom_infos[ $wcfmvm_registration_custom_field['name'] ] ) ? $wcfmvm_custom_infos[ $wcfmvm_registration_custom_field['name'] ] : 'no'; } elseif ( $wcfmvm_registration_custom_field['type'] == 'upload' ) { $field_name = 'wcfmvm_custom_infos[' . $wcfmvm_registration_custom_field['name'] . ']'; $field_id = md5( $field_name ); $field_value = isset( $wcfmvm_custom_infos[ $field_id ] ) ? $wcfmvm_custom_infos[ $field_id ] : ''; } else { $field_value = isset( $wcfmvm_custom_infos[ $wcfmvm_registration_custom_field['name'] ] ) ? $wcfmvm_custom_infos[ $wcfmvm_registration_custom_field['name'] ] : ''; } } if ( isset( $field_value ) ) { $wcfm_vendors_json_arr['vendor_additional_info'][ $key ] = $wcfmvm_registration_custom_field; $wcfm_vendors_json_arr['vendor_additional_info'][ $key ]['value'] = $field_value; } } } else { $wcfm_vendors_json_arr['vendor_additional_info'] = array(); } $wcfm_membership = get_user_meta( $wcfm_vendors_id, 'wcfm_membership', true ); //print_r($wcfm_membership); if ( $wcfm_membership && function_exists( 'wcfm_is_valid_membership' ) && wcfm_is_valid_membership( $wcfm_membership ) ) { $wcfm_vendors_json_arr['membership_details']['membership_title'] = get_the_title( $wcfm_membership ); $wcfm_vendors_json_arr['membership_details']['membership_id'] = $wcfm_membership; $next_schedule = get_user_meta( $wcfm_vendors_id, 'wcfm_membership_next_schedule', true ); if ( $next_schedule ) { $subscription = (array) get_post_meta( $wcfm_membership, 'subscription', true ); $is_free = isset( $subscription['is_free'] ) ? 'yes' : 'no'; $subscription_type = isset( $subscription['subscription_type'] ) ? $subscription['subscription_type'] : 'one_time'; if ( ( $is_free == 'no' ) && ( $subscription_type != 'one_time' ) ) { $wcfm_vendors_json_arr['membership_details']['membership_next_payment'] = date_i18n( wc_date_format(), $next_schedule ); } $member_billing_period = get_user_meta( $wcfm_vendors_id, 'wcfm_membership_billing_period', true ); $member_billing_cycle = get_user_meta( $wcfm_vendors_id, 'wcfm_membership_billing_cycle', true ); if ( $member_billing_period && $member_billing_cycle ) { $billing_period = isset( $subscription['billing_period'] ) ? $subscription['billing_period'] : '1'; $billing_period_count = isset( $subscription['billing_period_count'] ) ? $subscription['billing_period_count'] : ''; $billing_period_type = isset( $subscription['billing_period_type'] ) ? $subscription['billing_period_type'] : 'M'; $period_options = array( 'D' => 'days', 'M' => 'months', 'Y' => 'years', ); if ( $billing_period_count ) { if ( $member_billing_period ) { $member_billing_period = absint( $member_billing_period ); } else { $member_billing_period = absint( $billing_period_count ); } if ( ! $member_billing_cycle ) { $member_billing_cycle = 1; } $remaining_cycle = ( $member_billing_period - $member_billing_cycle ); if ( $remaining_cycle == 0 ) { $wcfm_vendors_json_arr['membership_details']['membership_expiry_on'] = date_i18n( wc_date_format(), $next_schedule ); } else { $expiry_time = strtotime( '+' . $remaining_cycle . ' ' . $period_options[ $billing_period_type ], $next_schedule ); $wcfm_vendors_json_arr['membership_details']['membership_expiry_on'] = date_i18n( wc_date_format(), $expiry_time ); } } else { if ( $is_free == 'yes' ) { $wcfm_vendors_json_arr['membership_details']['membership_expiry_on'] = date_i18n( wc_date_format(), $next_schedule ); } else { $wcfm_vendors_json_arr['membership_details']['membership_expiry_on'] = __( 'Never Expire', 'wc-frontend-manager' ); } } } else { $wcfm_vendors_json_arr['membership_details']['membership_expiry_on'] = __( 'Never Expire', 'wc-frontend-manager' ); } } } $wcfm_vendors_json_arr['shop_url'] = wcfmmp_get_store_url( $vendor_id ); return $wcfm_vendors_json_arr; } protected function get_vendor_settings_by_id( $vendor_id ) { $vendor_settings_data = get_user_meta( $vendor_id, 'wcfmmp_profile_settings', true ); if ( $vendor_settings_data != '' && isset( $vendor_settings_data ) ) { if ( isset( $vendor_settings_data['gravatar'] ) ) { $gravatar_image_url = wp_get_attachment_image_src( $vendor_settings_data['gravatar'], 'full' ); if ( ! empty( $gravatar_image_url ) ) { $vendor_settings_data['gravatar'] = $gravatar_image_url[0]; } } if ( isset( $vendor_settings_data['banner'] ) ) { $banner_image_url = wp_get_attachment_image_src( $vendor_settings_data['banner'], 'full' ); if ( ! empty( $banner_image_url ) ) { $vendor_settings_data['banner'] = $banner_image_url[0]; } } if ( isset( $vendor_settings_data['mobile_banner'] ) ) { $mobile_banner_image_url = wp_get_attachment_image_src( $vendor_settings_data['mobile_banner'], 'full' ); if ( ! empty( $mobile_banner_image_url ) ) { $vendor_settings_data['mobile_banner'] = $mobile_banner_image_url[0]; } } } else { $vendor_settings_data = null; } return $vendor_settings_data; } public function flutter_get_wcfm_sale_stats( $user_id ) { $id = $user_id; $price_decimal = get_option( 'woocommerce_price_num_decimals', 2 ); $sales_stats['gross_sales']['last_month'] = round( $this->wcfm_get_gross_sales_by_vendor( $id, 'last_month' ), $price_decimal ); $sales_stats['gross_sales']['month'] = round( $this->wcfm_get_gross_sales_by_vendor( $id, 'month' ), $price_decimal ); $sales_stats['gross_sales']['year'] = round( $this->wcfm_get_gross_sales_by_vendor( $id, 'year' ), $price_decimal ); $sales_stats['gross_sales']['week_5'] = round( $this->wcfm_get_gross_sales_by_vendor( $id, '7day' ), $price_decimal ); $sales_stats['gross_sales']['week_4'] = round( $this->wcfm_get_gross_sales_by_vendor( $id, '14day' ), $price_decimal ); $sales_stats['gross_sales']['week_3'] = round( $this->wcfm_get_gross_sales_by_vendor( $id, '21day' ), $price_decimal ); $sales_stats['gross_sales']['week_2'] = round( $this->wcfm_get_gross_sales_by_vendor( $id, '28day' ), $price_decimal ); $sales_stats['gross_sales']['week_1'] = round( $this->wcfm_get_gross_sales_by_vendor( $id, '35day' ), $price_decimal ); $sales_stats['gross_sales']['all'] = round( $this->wcfm_get_gross_sales_by_vendor( $id, 'all' ), $price_decimal ); if ( $sales_stats['gross_sales']['last_month'] != 0 ) { $profit_percentage = round( $sales_stats['gross_sales']['month'] - $sales_stats['gross_sales']['last_month'], 2 ); $profit_percentage = round( $profit_percentage / $sales_stats['gross_sales']['last_month'] * 100 / 100, 2 ); } else { $profit_percentage = round( $sales_stats['gross_sales']['month'] - $sales_stats['gross_sales']['last_month'], 2 ); $profit_percentage = round( $profit_percentage / 1 * 100 / 100, 2 ); } $sales_stats['gross_sales']['profit_percentage'] = $profit_percentage; $sales_stats['earnings']['last_month'] = round( $this->wcfm_get_commission_by_vendor( $id, 'last_month' ), $price_decimal ); $sales_stats['earnings']['month'] = round( $this->wcfm_get_commission_by_vendor( $id, 'month' ), $price_decimal ); $sales_stats['earnings']['year'] = round( $this->wcfm_get_commission_by_vendor( $id, 'year' ), $price_decimal ); $sales_stats['earnings']['week_5'] = round( $this->wcfm_get_commission_by_vendor( $id, '7day' ), $price_decimal ); $sales_stats['earnings']['week_4'] = round( $this->wcfm_get_commission_by_vendor( $id, '14day' ), $price_decimal ); $sales_stats['earnings']['week_3'] = round( $this->wcfm_get_commission_by_vendor( $id, '21day' ), $price_decimal ); $sales_stats['earnings']['week_2'] = round( $this->wcfm_get_commission_by_vendor( $id, '28day' ), $price_decimal ); $sales_stats['earnings']['week_1'] = round( $this->wcfm_get_commission_by_vendor( $id, '35day' ), $price_decimal ); $sales_stats['earnings']['all'] = round( $this->wcfm_get_commission_by_vendor( $id, 'all' ), $price_decimal ); if ( $sales_stats['earnings']['last_month'] != 0 ) { $profit_percentage = round( $sales_stats['earnings']['month'] - $sales_stats['earnings']['last_month'], 2 ); $profit_percentage = round( $profit_percentage / $sales_stats['earnings']['last_month'] * 100 / 100, 2 ); } else { $profit_percentage = round( $sales_stats['earnings']['month'] - $sales_stats['earnings']['last_month'], 2 ); $profit_percentage = round( $profit_percentage / 1 * 100 / 100, 2 ); } $sales_stats['earnings']['profit_percentage'] = $profit_percentage; $sales_stats['currency'] = get_woocommerce_currency(); return new WP_REST_Response( array( 'status' => 'success', 'response' => $sales_stats, ), 200 ); } public function flutter_update_wcfm_order_status( $request, $user_id ) { global $WCFM; $order_id = absint( $request['order_id'] ); $order_status = $request['order_status']; $order = wc_get_order( $order_id ); $order->update_status( $order_status, '', true ); $shop_name = get_user_by( 'ID', $user_id )->display_name; if ( wcfm_is_vendor() ) { $shop_name = wcfm_get_vendor_store( absint( $user_id ) ); } $wcfm_messages = sprintf( __( 'Order status updated to %1$s by %2$s', 'wc-frontend-manager' ), wc_get_order_status_name( str_replace( 'wc-', '', $order_status ) ), $shop_name ); $is_customer_note = apply_filters( 'wcfm_is_allow_order_update_note_for_customer', '1' ); if ( wcfm_is_vendor( $user_id ) ) { add_filter( 'woocommerce_new_order_note_data', array( $WCFM->wcfm_marketplace, 'wcfm_update_comment_vendor' ), 10, 2 ); } $comment_id = $order->add_order_note( $wcfm_messages, $is_customer_note ); if ( wcfm_is_vendor( $user_id ) ) { add_comment_meta( $comment_id, '_vendor_id', $user_id ); } if ( wcfm_is_vendor( $user_id ) ) { remove_filter( 'woocommerce_new_order_note_data', array( $WCFM->wcfm_marketplace, 'wcfm_update_comment_vendor' ), 10, 2 ); } $wcfm_messages = sprintf( __( '%1$s order status updated to %2$s by %3$s', 'wc-frontend-manager' ), '#' . $order->get_order_number() . '', wc_get_order_status_name( str_replace( 'wc-', '', $order_status ) ), $shop_name ); $WCFM->wcfm_notification->wcfm_send_direct_message( -2, 0, 1, 0, $wcfm_messages, 'status-update' ); do_action( 'woocommerce_order_edit_status', $order_id, $order_status ); do_action( 'wcfm_order_status_updated', $order_id, $order_status ); return new WP_REST_Response( array( 'status' => 'success', 'response' => $order->get_data(), ), 200 ); } public function flutter_get_wcfm_reviews( $request, $user_id ) { global $WCFM, $wpdb, $WCFMmp; $vendor_id = $user_id; $length = sanitize_text_field( $request['per_page'] ); $offset = sanitize_text_field( $request['page'] ); $the_orderby = ! empty( $request['orderby'] ) ? sanitize_text_field( $request['orderby'] ) : 'ID'; $the_order = ( ! empty( $request['order'] ) && 'asc' === $request['order'] ) ? 'ASC' : 'DESC'; $status_filter = ''; if ( isset( $request['status_type'] ) && ( $request['status_type'] != '' ) ) { $status_filter = sanitize_text_field( $request['status_type'] ); if ( $status_filter == 'approved' ) { $status_filter = ' AND `approved` = 1'; } elseif ( $status_filter == 'pending' ) { $status_filter = ' AND `approved` = 0'; } } $reviews_vendor_filter = ' AND `vendor_id` = ' . $vendor_id; $sql = "SELECT COUNT(ID) from {$wpdb->prefix}wcfm_marketplace_reviews"; $sql .= ' WHERE 1=1'; $sql .= $reviews_vendor_filter; $sql .= $status_filter; $wcfm_review_items = $wpdb->get_var( $sql ); if ( ! $wcfm_review_items ) { $wcfm_review_items = 0; } $sql = "SELECT * from {$wpdb->prefix}wcfm_marketplace_reviews"; $sql .= ' WHERE 1=1'; $sql .= $reviews_vendor_filter; $sql .= $status_filter; $sql .= " ORDER BY `{$the_orderby}` {$the_order}"; $sql .= " LIMIT {$length}"; $sql .= " OFFSET {$offset}"; $wcfm_reviews_array = $wpdb->get_results( $sql ); return new WP_REST_Response( array( 'status' => 'success', 'response' => $wcfm_reviews_array, ), 200 ); } // Update review status function flutter_update_wcfm_review( $request ) { global $WCFM, $WCFMmp, $wpdb; $reviewid = absint( $request['id'] ); $status = absint( $request['status'] ); $wcfm_review_categories = get_wcfm_marketplace_active_review_categories(); if ( $reviewid ) { $review_data = $wpdb->get_row( "SELECT * FROM {$wpdb->prefix}wcfm_marketplace_reviews WHERE `ID`= " . $reviewid ); $review_meta = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}wcfm_marketplace_review_rating_meta WHERE `type` = 'rating_category' AND `review_id`= " . $reviewid . ' ORDER BY ID ASC' ); if ( $review_data && ! empty( $review_data ) && is_object( $review_data ) ) { if ( $status ) { // On Approve $total_review_count = get_user_meta( $review_data->vendor_id, '_wcfmmp_total_review_count', true ); if ( ! $total_review_count ) { $total_review_count = 0; } else { $total_review_count = absint( $total_review_count ); } $total_review_count++; update_user_meta( $review_data->vendor_id, '_wcfmmp_total_review_count', $total_review_count ); $total_review_rating = get_user_meta( $review_data->vendor_id, '_wcfmmp_total_review_rating', true ); if ( ! $total_review_rating ) { $total_review_rating = 0; } else { $total_review_rating = (float) $total_review_rating; } $total_review_rating += (float) $review_data->review_rating; update_user_meta( $review_data->vendor_id, '_wcfmmp_total_review_rating', $total_review_rating ); $avg_review_rating = $total_review_rating / $total_review_count; update_user_meta( $review_data->vendor_id, '_wcfmmp_avg_review_rating', $avg_review_rating ); $wcfm_store_review_categories = array(); if ( ! empty( $review_meta ) ) { foreach ( $review_meta as $review_meta_cat ) { $wcfm_store_review_categories[] = $review_meta_cat->value; } } $category_review_rating = get_user_meta( $review_data->vendor_id, '_wcfmmp_category_review_rating', true ); if ( ! $category_review_rating ) { $category_review_rating = array(); } foreach ( $wcfm_review_categories as $wcfm_review_cat_key => $wcfm_review_category ) { if ( isset( $wcfm_store_review_categories[ $wcfm_review_cat_key ] ) ) { $total_category_review_rating = 0; $avg_category_review_rating = 0; if ( $category_review_rating && ! empty( $category_review_rating ) && isset( $category_review_rating[ $wcfm_review_cat_key ] ) ) { $total_category_review_rating = $category_review_rating[ $wcfm_review_cat_key ]['total']; $avg_category_review_rating = $category_review_rating[ $wcfm_review_cat_key ]['avg']; } $total_category_review_rating += (float) $wcfm_store_review_categories[ $wcfm_review_cat_key ]; $avg_category_review_rating = $total_category_review_rating / $total_review_count; $category_review_rating[ $wcfm_review_cat_key ]['total'] = $total_category_review_rating; $category_review_rating[ $wcfm_review_cat_key ]['avg'] = $avg_category_review_rating; } else { $category_review_rating[ $wcfm_review_cat_key ]['total'] = 0; $category_review_rating[ $wcfm_review_cat_key ]['avg'] = 0; } } $category_review_rating = update_user_meta( $review_data->vendor_id, '_wcfmmp_category_review_rating', $category_review_rating ); update_user_meta( $review_data->vendor_id, '_wcfmmp_last_author_id', $review_data->author_id ); update_user_meta( $review_data->vendor_id, '_wcfmmp_last_author_name', $review_data->author_name ); $wpdb->update( "{$wpdb->prefix}wcfm_marketplace_reviews", array( 'approved' => 1 ), array( 'ID' => $reviewid ), array( '%d' ), array( '%d' ) ); } else { // On UnApprove $total_review_count = get_user_meta( $review_data->vendor_id, '_wcfmmp_total_review_count', true ); if ( ! $total_review_count ) { $total_review_count = 0; } else { $total_review_count = absint( $total_review_count ); } if ( $total_review_count ) { $total_review_count--; } update_user_meta( $review_data->vendor_id, '_wcfmmp_total_review_count', $total_review_count ); $total_review_rating = get_user_meta( $review_data->vendor_id, '_wcfmmp_total_review_rating', true ); if ( ! $total_review_rating ) { $total_review_rating = 0; } else { $total_review_rating = (float) $total_review_rating; } if ( $total_review_rating ) { $total_review_rating -= (float) $review_data->review_rating; } update_user_meta( $review_data->vendor_id, '_wcfmmp_total_review_rating', $total_review_rating ); $avg_review_rating = 0; if ( $total_review_rating && $total_review_count ) { $avg_review_rating = $total_review_rating / $total_review_count; } update_user_meta( $review_data->vendor_id, '_wcfmmp_avg_review_rating', $avg_review_rating ); $wcfm_store_review_categories = array(); if ( ! empty( $review_meta ) ) { foreach ( $review_meta as $review_meta_cat ) { $wcfm_store_review_categories[] = $review_meta_cat->value; } } $category_review_rating = get_user_meta( $review_data->vendor_id, '_wcfmmp_category_review_rating', true ); if ( ! $category_review_rating ) { $category_review_rating = array(); } foreach ( $wcfm_review_categories as $wcfm_review_cat_key => $wcfm_review_category ) { if ( isset( $wcfm_store_review_categories[ $wcfm_review_cat_key ] ) ) { $total_category_review_rating = 0; $avg_category_review_rating = 0; if ( $category_review_rating && ! empty( $category_review_rating ) && isset( $category_review_rating[ $wcfm_review_cat_key ] ) ) { $total_category_review_rating = $category_review_rating[ $wcfm_review_cat_key ]['total']; $avg_category_review_rating = $category_review_rating[ $wcfm_review_cat_key ]['avg']; } if ( $total_category_review_rating ) { $total_category_review_rating -= (float) $wcfm_store_review_categories[ $wcfm_review_cat_key ]; } if ( $total_category_review_rating && $total_review_count ) { $avg_category_review_rating = $total_category_review_rating / $total_review_count; } $category_review_rating[ $wcfm_review_cat_key ]['total'] = $total_category_review_rating; $category_review_rating[ $wcfm_review_cat_key ]['avg'] = $avg_category_review_rating; } else { $category_review_rating[ $wcfm_review_cat_key ]['total'] = 0; $category_review_rating[ $wcfm_review_cat_key ]['avg'] = 0; } } $category_review_rating = update_user_meta( $review_data->vendor_id, '_wcfmmp_category_review_rating', $category_review_rating ); $wpdb->update( "{$wpdb->prefix}wcfm_marketplace_reviews", array( 'approved' => 0 ), array( 'ID' => $reviewid ), array( '%d' ), array( '%d' ) ); } } } } /* GET WCFM SALE STATS FUNCTIONS */ function wcfm_query_time_range_filter( $sql, $time, $interval = '7day', $start_date = '', $end_date = '', $table_handler = 'commission' ) { switch ( $interval ) { case 'year': $sql .= " AND YEAR( {$table_handler}.{$time} ) = YEAR( CURDATE() )"; break; case 'last_month': $sql .= " AND MONTH( {$table_handler}.{$time} ) = MONTH( NOW() ) - 1"; break; case 'month': $sql .= " AND MONTH( {$table_handler}.{$time} ) = MONTH( NOW() )"; break; case 'all': break; case '7day': $sql .= " AND DATE( {$table_handler}.{$time} ) BETWEEN DATE_SUB( NOW(), INTERVAL 7 DAY ) AND NOW()"; break; case '14day': $sql .= " AND DATE( {$table_handler}.{$time} ) BETWEEN DATE_SUB( NOW(), INTERVAL 14 DAY ) AND DATE_SUB( NOW(), INTERVAL 7 DAY )"; break; case '21day': $sql .= " AND DATE( {$table_handler}.{$time} ) BETWEEN DATE_SUB( NOW(), INTERVAL 21 DAY ) AND DATE_SUB( NOW(), INTERVAL 14 DAY )"; break; case '28day': $sql .= " AND DATE( {$table_handler}.{$time} ) BETWEEN DATE_SUB( NOW(), INTERVAL 28 DAY ) AND DATE_SUB( NOW(), INTERVAL 21 DAY )"; break; case '35day': $sql .= " AND DATE( {$table_handler}.{$time} ) BETWEEN DATE_SUB( NOW(), INTERVAL 35 DAY ) AND DATE_SUB( NOW(), INTERVAL 28 DAY )"; break; case 'default': } return $sql; } function wcfm_get_gross_sales_by_vendor( $vendor_id = '', $interval = '7day', $is_paid = false, $order_id = 0, $filter_date_form = '', $filter_date_to = '' ) { global $WCFM, $wpdb, $WCMp, $WCFMmp; if ( $vendor_id ) { $vendor_id = absint( $vendor_id ); } $gross_sales = 0; $marketplece = wcfm_is_marketplace(); if ( $marketplece == 'wcvendors' ) { $sql = "SELECT order_id, GROUP_CONCAT(product_id) product_ids, SUM( commission.total_shipping ) AS total_shipping FROM {$wpdb->prefix}pv_commission AS commission"; $sql .= ' WHERE 1=1'; if ( $vendor_id ) { $sql .= " AND `vendor_id` = {$vendor_id}"; } if ( $order_id ) { $sql .= " AND `order_id` = {$order_id}"; } else { if ( $is_paid ) { $sql .= " AND commission.status = 'paid'"; } $sql = $this->wcfm_query_time_range_filter( $sql, 'time', $interval, $filter_date_form, $filter_date_to ); } $sql .= ' GROUP BY commission.order_id'; $gross_sales_whole_week = $wpdb->get_results( $sql ); if ( ! empty( $gross_sales_whole_week ) ) { foreach ( $gross_sales_whole_week as $net_sale_whole_week ) { if ( $net_sale_whole_week->order_id ) { $order_post_title = get_the_title( $net_sale_whole_week->order_id ); if ( ! $order_post_title ) { continue; } try { $order = wc_get_order( $net_sale_whole_week->order_id ); $line_items = $order->get_items( 'line_item' ); $valid_items = (array) $order_item_ids = explode( ',', $net_sale_whole_week->product_ids ); foreach ( $line_items as $key => $line_item ) { if ( $line_item->get_product_id() == 0 ) { $_product_id = wc_get_order_item_meta( $key, '_product_id', true ); $_variation_id = wc_get_order_item_meta( $key, '_variation_id', true ); if ( in_array( $_product_id, $valid_items ) || in_array( $_variation_id, $valid_items ) ) { $gross_sales += (float) sanitize_text_field( $line_item->get_total() ); if ( version_compare( WCV_VERSION, '2.0.0', '<' ) ) { if ( WC_Vendors::$pv_options->get_option( 'give_tax' ) ) { $gross_sales += (float) sanitize_text_field( $line_item->get_total_tax() ); } } else { if ( get_option( 'wcvendors_vendor_give_taxes' ) ) { $gross_sales += (float) sanitize_text_field( $line_item->get_total_tax() ); } } } } elseif ( in_array( $line_item->get_variation_id(), $valid_items ) || in_array( $line_item->get_product_id(), $valid_items ) ) { $gross_sales += (float) sanitize_text_field( $line_item->get_total() ); if ( version_compare( WCV_VERSION, '2.0.0', '<' ) ) { if ( WC_Vendors::$pv_options->get_option( 'give_tax' ) ) { $gross_sales += (float) sanitize_text_field( $line_item->get_total_tax() ); } } else { if ( get_option( 'wcvendors_vendor_give_taxes' ) ) { $gross_sales += (float) sanitize_text_field( $line_item->get_total_tax() ); } } } } } catch ( Exception $e ) { continue; } } if ( version_compare( WCV_VERSION, '2.0.0', '<' ) ) { if ( WC_Vendors::$pv_options->get_option( 'give_shipping' ) ) { $gross_sales += (float) $net_sale_whole_week->total_shipping; } } else { if ( get_option( 'wcvendors_vendor_give_shipping' ) ) { $gross_sales += (float) $net_sale_whole_week->total_shipping; } } } } } elseif ( $marketplece == 'wcmarketplace' ) { $sql = "SELECT order_item_id, shipping, shipping_tax_amount FROM {$wpdb->prefix}wcmp_vendor_orders AS commission"; $sql .= ' WHERE 1=1'; if ( $vendor_id ) { $sql .= " AND `vendor_id` = {$vendor_id}"; } if ( $order_id ) { $sql .= " AND `order_id` = {$order_id}"; } else { $sql .= " AND `line_item_type` = 'product' AND `commission_id` != 0 AND `commission_id` != '' AND `is_trashed` != 1"; if ( $is_paid ) { $sql .= " AND commission.commission_status = 'paid'"; $sql = $this->wcfm_query_time_range_filter( $sql, 'commission_paid_date', $interval, $filter_date_form, $filter_date_to ); } else { $sql = $this->wcfm_query_time_range_filter( $sql, 'created', $interval, $filter_date_form, $filter_date_to ); } } $gross_sales_whole_week = $wpdb->get_results( $sql ); if ( ! empty( $gross_sales_whole_week ) ) { foreach ( $gross_sales_whole_week as $net_sale_whole_week ) { if ( $net_sale_whole_week->order_item_id ) { try { $line_item = new WC_Order_Item_Product( $net_sale_whole_week->order_item_id ); $gross_sales += (float) sanitize_text_field( $line_item->get_total() ); if ( $WCMp->vendor_caps->vendor_payment_settings( 'give_tax' ) ) { $gross_sales += (float) sanitize_text_field( $line_item->get_total_tax() ); $gross_sales += (float) $net_sale_whole_week->shipping_tax_amount; } if ( $WCMp->vendor_caps->vendor_payment_settings( 'give_shipping' ) ) { $gross_sales += (float) $net_sale_whole_week->shipping; } } catch ( Exception $e ) { continue; } } } } } elseif ( $marketplece == 'wcpvendors' ) { $sql = 'SELECT SUM( commission.product_amount ) AS total_product_amount, SUM( commission.product_shipping_amount ) AS product_shipping_amount, SUM( commission.product_shipping_tax_amount ) AS product_shipping_tax_amount, SUM( commission.product_tax_amount ) AS product_tax_amount FROM ' . WC_PRODUCT_VENDORS_COMMISSION_TABLE . ' AS commission'; $sql .= ' WHERE 1=1'; if ( $vendor_id ) { $sql .= " AND commission.vendor_id = {$vendor_id}"; } if ( $order_id ) { $sql .= " AND `order_id` = {$order_id}"; } else { if ( $is_paid ) { $sql .= " AND commission.commission_status = 'paid'"; $sql = $this->wcfm_query_time_range_filter( $sql, 'paid_date', $interval, $filter_date_form, $filter_date_to ); } else { $sql = $this->wcfm_query_time_range_filter( $sql, 'order_date', $interval, $filter_date_form, $filter_date_to ); } } $total_sales = $wpdb->get_results( $sql ); if ( ! empty( $total_sales ) ) { foreach ( $total_sales as $total_sale ) { $gross_sales = $total_sale->total_product_amount + $total_sale->product_shipping_amount + $total_sale->product_shipping_tax_amount + $total_sale->product_tax_amount; } } } elseif ( $marketplece == 'dokan' ) { $sql = "SELECT SUM( commission.order_total ) AS total_order_amount FROM {$wpdb->prefix}dokan_orders AS commission LEFT JOIN {$wpdb->posts} p ON commission.order_id = p.ID"; $sql .= ' WHERE 1=1'; if ( $vendor_id ) { $sql .= " AND commission.seller_id = {$vendor_id}"; } if ( $order_id ) { $sql .= " AND `commission.order_id` = {$order_id}"; } else { $status = dokan_withdraw_get_active_order_status_in_comma(); $sql .= " AND commission.order_status IN ({$status})"; $sql = $this->wcfm_query_time_range_filter( $sql, 'post_date', $interval, '', '', 'p' ); } $total_sales = $wpdb->get_results( $sql ); if ( ! empty( $total_sales ) ) { foreach ( $total_sales as $total_sale ) { $gross_sales = $total_sale->total_order_amount; } } } elseif ( $marketplece == 'wcfmmarketplace' ) { $sql = "SELECT ID, order_id, item_id, item_total, item_sub_total, refunded_amount, shipping, tax, shipping_tax_amount FROM {$wpdb->prefix}wcfm_marketplace_orders AS commission"; $sql .= ' WHERE 1=1'; if ( $vendor_id ) { $sql .= " AND `vendor_id` = {$vendor_id}"; } if ( $order_id ) { $sql .= " AND `order_id` = {$order_id}"; //$sql .= " AND `is_refunded` != 1"; } else { $sql .= apply_filters( 'wcfm_order_status_condition', '', 'commission' ); $sql .= ' AND `is_trashed` = 0'; if ( $is_paid ) { $sql .= " AND commission.withdraw_status = 'completed'"; $sql = $this->wcfm_query_time_range_filter( $sql, 'commission_paid_date', $interval, $filter_date_form, $filter_date_to ); } else { $sql = $this->wcfm_query_time_range_filter( $sql, 'created', $interval, $filter_date_form, $filter_date_to ); } } $gross_sales_whole_week = $wpdb->get_results( $sql ); $gross_commission_ids = array(); $gross_total_refund_amount = 0; if ( ! empty( $gross_sales_whole_week ) ) { foreach ( $gross_sales_whole_week as $net_sale_whole_week ) { $gross_commission_ids[] = $net_sale_whole_week->ID; $gross_total_refund_amount += (float) sanitize_text_field( $net_sale_whole_week->refunded_amount ); } if ( ! empty( $gross_commission_ids ) ) { try { if ( apply_filters( 'wcfmmmp_gross_sales_respect_setting', true ) ) { $gross_sales = (float) $WCFMmp->wcfmmp_commission->wcfmmp_get_commission_meta_sum( $gross_commission_ids, 'gross_total' ); } else { $gross_sales = (float) $WCFMmp->wcfmmp_commission->wcfmmp_get_commission_meta_sum( $gross_commission_ids, 'gross_sales_total' ); } // Deduct Refunded Amount $gross_sales -= (float) $gross_total_refund_amount; } catch ( Exception $e ) { //continue; } } } } if ( ! $gross_sales ) { $gross_sales = 0; } return $gross_sales; } /** * Total commission paid by Admin */ function wcfm_get_commission_by_vendor( $vendor_id = '', $interval = '7day', $is_paid = false, $order_id = 0, $filter_date_form = '', $filter_date_to = '' ) { global $WCFM, $wpdb, $WCMp; if ( $vendor_id ) { $vendor_id = absint( $vendor_id ); } $commission = 0; $marketplece = wcfm_is_marketplace(); if ( $marketplece == 'wcvendors' ) { $commission_table = 'pv_commission'; $total_due = 'total_due'; $total_shipping = 'total_shipping'; $tax = 'tax'; $shipping_tax = 'tax'; $status = 'status'; $time = 'time'; $vendor_handler = 'vendor_id'; $table_handler = 'commission'; } elseif ( $marketplece == 'wcmarketplace' ) { $commission_table = 'wcmp_vendor_orders'; $total_due = 'commission_amount'; $total_shipping = 'shipping'; $tax = 'tax'; $shipping_tax = 'shipping_tax_amount'; $status = 'commission_status'; $vendor_handler = 'vendor_id'; $table_handler = 'commission'; if ( $is_paid ) { $time = 'commission_paid_date'; } else { $time = 'created'; } } elseif ( $marketplece == 'wcpvendors' ) { $commission_table = 'wcpv_commissions'; $total_due = 'total_commission_amount'; $total_shipping = 'product_shipping_amount'; $tax = 'product_tax_amount'; $shipping_tax = 'product_shipping_tax_amount'; $status = 'commission_status'; $vendor_handler = 'vendor_id'; $table_handler = 'commission'; if ( $is_paid ) { $time = 'paid_date'; } else { $time = 'order_date'; } } elseif ( $marketplece == 'dokan' ) { $order_status = apply_filters( 'wcfm_dokan_allowed_order_status', array( 'completed', 'processing', 'on-hold' ) ); $commission_table = 'dokan_orders'; $total_due = 'net_amount'; $time = 'post_date'; $vendor_handler = 'seller_id'; $table_handler = 'p'; if ( $is_paid ) { $sql = "SELECT SUM( withdraw.amount ) AS amount FROM {$wpdb->prefix}dokan_withdraw AS withdraw"; $sql .= ' WHERE 1=1'; if ( $vendor_id ) { $sql .= " AND withdraw.user_id = {$vendor_id}"; } $sql .= ' AND withdraw.status = 1'; $sql = $this->wcfm_query_time_range_filter( $sql, 'date', $interval, $filter_date_form, $filter_date_to, 'withdraw' ); $total_commissions = $wpdb->get_results( $sql ); $commission = 0; if ( ! empty( $total_commissions ) ) { foreach ( $total_commissions as $total_commission ) { $commission += $total_commission->amount; } } if ( ! $commission ) { $commission = 0; } return $commission; } } elseif ( $marketplece == 'wcfmmarketplace' ) { $commission_table = 'wcfm_marketplace_orders'; $total_due = 'total_commission'; $total_shipping = 'shipping'; $tax = 'tax'; $shipping_tax = 'shipping_tax_amount'; $status = 'withdraw_status'; $vendor_handler = 'vendor_id'; $table_handler = 'commission'; if ( $is_paid ) { $time = 'commission_paid_date'; } else { $time = 'created'; } } if ( $marketplece == 'dokan' ) { $order_status = apply_filters( 'wcfm_dokan_allowed_order_status', array( 'completed', 'processing', 'on-hold' ) ); $sql = "SELECT SUM( commission.{$total_due} ) AS total_due FROM {$wpdb->prefix}{$commission_table} AS commission LEFT JOIN {$wpdb->posts} p ON commission.order_id = p.ID"; } else { $sql = "SELECT SUM( commission.{$total_due} ) AS total_due, SUM( commission.{$total_shipping} ) AS total_shipping, SUM( commission.{$tax} ) AS tax, SUM( commission.{$shipping_tax} ) AS shipping_tax FROM {$wpdb->prefix}{$commission_table} AS commission"; } $sql .= ' WHERE 1=1'; if ( $vendor_id ) { $sql .= " AND commission.{$vendor_handler} = {$vendor_id}"; } if ( $is_paid ) { $sql .= " AND (commission.{$status} = 'paid' OR commission.{$status} = 'completed')"; } if ( $marketplece == 'wcmarketplace' ) { $sql .= " AND commission.commission_id != 0 AND commission.commission_id != '' AND `is_trashed` != 1"; } if ( $marketplece == 'dokan' ) { $status = dokan_withdraw_get_active_order_status_in_comma(); $sql .= " AND commission.order_status IN ({$status})"; } if ( $marketplece == 'wcfmmarketplace' ) { if ( $order_id ) { $sql .= " AND `order_id` = {$order_id}"; } else { $sql .= apply_filters( 'wcfm_order_status_condition', '', 'commission' ); $sql .= ' AND `is_refunded` = 0 AND `is_trashed` = 0'; } } if ( ! $order_id ) { $sql = $this->wcfm_query_time_range_filter( $sql, $time, $interval, $filter_date_form, $filter_date_to, $table_handler ); } $total_commissions = $wpdb->get_results( $sql ); $commission = 0; if ( ! empty( $total_commissions ) ) { foreach ( $total_commissions as $total_commission ) { $commission += $total_commission->total_due; if ( $marketplece == 'wcvendors' ) { if ( version_compare( WCV_VERSION, '2.0.0', '<' ) ) { if ( WC_Vendors::$pv_options->get_option( 'give_tax' ) ) { $commission += $total_commission->total_shipping; } if ( WC_Vendors::$pv_options->get_option( 'give_shipping' ) ) { $commission += $total_commission->tax; } } else { if ( get_option( 'wcvendors_vendor_give_taxes' ) ) { $commission += $total_commission->total_shipping; } if ( get_option( 'wcvendors_vendor_give_shipping' ) ) { $commission += $total_commission->tax; } } } elseif ( $marketplece == 'wcmarketplace' ) { if ( $WCMp->vendor_caps->vendor_payment_settings( 'give_shipping' ) ) { $commission += ( $total_commission->total_shipping == 'NAN' ) ? 0 : $total_commission->total_shipping; } if ( $WCMp->vendor_caps->vendor_payment_settings( 'give_tax' ) ) { $commission += ( $total_commission->tax == 'NAN' ) ? 0 : $total_commission->tax; $commission += ( $total_commission->shipping_tax == 'NAN' ) ? 0 : $total_commission->shipping_tax; } } } } if ( ! $commission ) { $commission = 0; } return $commission; } /* GET WCFM SALE STATS FUNCTIONS. CUSTOM BY TOAN 04/11/2020 */ /* GET NOTIFICATIONS */ function wcfm_get_wcfm_notification_by_vendor( $request, $user_id ) { global $WCFM, $wpdb; if ( isset( $request['per_page'] ) && $request['per_page'] ) { $limit = absint( $request['per_page'] ); $offset = absint( $request['page'] ); $offset = ( $offset - 1 ) * $limit; $message_to = apply_filters( 'wcfm_message_author', $user_id ); $sql = 'SELECT wcfm_messages.* FROM ' . $wpdb->prefix . 'wcfm_messages AS wcfm_messages'; $vendor_filter = " WHERE ( `author_id` = {$message_to} OR `message_to` = -1 OR `message_to` = {$message_to} )"; $sql .= $vendor_filter; $message_status_filter = " AND NOT EXISTS (SELECT * FROM {$wpdb->prefix}wcfm_messages_modifier as wcfm_messages_modifier_2 WHERE wcfm_messages.ID = wcfm_messages_modifier_2.message AND wcfm_messages_modifier_2.read_by={$message_to})"; $sql .= $message_status_filter; $sql .= ' ORDER BY wcfm_messages.`ID` DESC'; $sql .= " LIMIT $limit"; $sql .= " OFFSET $offset"; $wcfm_messages = $wpdb->get_results( $sql ); foreach ( $wcfm_messages as $wcfm_message ) { unset( $wcfm_message->author_id, $wcfm_message->reply_to, $wcfm_message->author_is_admin, $wcfm_message->author_is_vendor, $wcfm_message->author_is_customer, $wcfm_message->is_notice, $wcfm_message->is_direct_message, $wcfm_message->is_pined, $wcfm_message->message_to ); $wcfm_message->message = strip_tags( $wcfm_message->message ); } return $wcfm_messages; } } function get_nearest_vendors( $request ) { global $WCFM, $WCFMmp, $wpdb; $wcfmmp_radius_lat = $request['lat']; $wcfmmp_radius_lng = $request['long']; $wcfmmp_radius = .0; if ( isset( $request['radius'] ) ) { $wcfmmp_radius = $request['radius']; } $args = array( 'role' => 'wcfm_vendor', 'fields' => array( 'ID' ), ); $users = get_users( $args ); $list_nearby_users = array(); foreach ( $users as $user ) { $vendor_lat = get_user_meta( $user->ID, '_wcfm_store_lat' )[0]; $vendor_lng = get_user_meta( $user->ID, '_wcfm_store_lng' )[0]; if ( isset( $vendor_lat ) && isset( $vendor_lng ) ) { if ( $vendor_lat != '' && $vendor_lng != '' ) { $distance = round( $this->distance( $wcfmmp_radius_lat, $wcfmmp_radius_lng, $vendor_lat, $vendor_lat ) ); if ( $distance <= $wcfmmp_radius ) { $list_nearby_users[] = $user->ID; } } } } $result = array(); foreach ( $list_nearby_users as $item ) : $result[] = $this->get_formatted_item_data( $item, array(), null, null, null ); endforeach; return $result; } function distance( $lat1, $lon1, $lat2, $lon2 ) { $pi80 = M_PI / 180; $lat1 *= $pi80; $lon1 *= $pi80; $lat2 *= $pi80; $lon2 *= $pi80; $r = 6372.797; // mean radius of Earth in km $dlat = $lat2 - $lat1; $dlon = $lon2 - $lon1; $a = sin( $dlat / 2 ) * sin( $dlat / 2 ) + cos( $lat1 ) * cos( $lat2 ) * sin( $dlon / 2 ) * sin( $dlon / 2 ); $c = 2 * atan2( sqrt( $a ), sqrt( 1 - $a ) ); $km = $r * $c; return $km; } function get_product_categories( $request ) { $store_id = $request['id']; $page = isset( $request['page'] ) ? $request['page'] : 1; $limit = isset( $request['limit'] ) ? $request['limit'] : 10; $params = array( 'page' => $page, 'per_page' => $limit, 'orderby' => 'name', 'order' => 'asc', ); if ( isset( $request['lang'] ) ) { $params['lang'] = $request['lang']; } if ( isset( $request['hide_empty'] ) ) { $params['hide_empty'] = $request['hide_empty']; } if ( isset( $store_id ) ) { global $woocommerce, $wpdb; $table_name = $wpdb->prefix . 'posts'; $sql = "SELECT * FROM `$table_name` "; $sql .= "WHERE `$table_name`.`post_type` = 'product' AND `$table_name`.`post_status` = 'publish' "; $sql .= "AND `$table_name`.`post_author` = $store_id"; $products = $wpdb->get_results( $sql ); $categoryIds = array(); foreach ( $products as $object ) { $terms = get_the_terms( $object->ID, 'product_cat' ); foreach ( (array) $terms as $term ) { $cat_id = $term->term_id; if ( ! in_array( $cat_id, $categoryIds ) ) { $categoryIds[] = $cat_id; } } } if ( empty( $categoryIds ) ) { return array(); } $params['include'] = $categoryIds; } $controller = new WC_REST_Product_Categories_Controller(); $req = new WP_REST_Request( 'GET' ); $req->set_query_params( $params ); $response = $controller->get_items( $req ); return $response->get_data(); } function generate_vendor_delivery_time_checkout_field( $vendor_id ) { global $WCFM, $WCFMmp, $wcfmd; $wcfm_vendor_delivery_time = get_user_meta( $vendor_id, 'wcfm_vendor_delivery_time', true ); if ( ! $wcfm_vendor_delivery_time ) { $wcfm_vendor_delivery_time = array(); } $wcfm_delivery_time_enable = isset( $wcfm_vendor_delivery_time['enable'] ) ? 'yes' : 'no'; if ( $wcfm_delivery_time_enable == 'yes' ) { $wcfm_delivery_time_off_days = isset( $wcfm_vendor_delivery_time['off_days'] ) ? $wcfm_vendor_delivery_time['off_days'] : array(); $wcfm_delivery_time_start_from = isset( $wcfm_vendor_delivery_time['start_from'] ) ? $wcfm_vendor_delivery_time['start_from'] : 0; $wcfm_delivery_time_end_at = isset( $wcfm_vendor_delivery_time['end_at'] ) ? $wcfm_vendor_delivery_time['end_at'] : 0; $wcfm_delivery_time_slots_duration = isset( $wcfm_vendor_delivery_time['slots_duration'] ) ? $wcfm_vendor_delivery_time['slots_duration'] : 0; $wcfm_delivery_time_display_format = isset( $wcfm_vendor_delivery_time['display_format'] ) ? $wcfm_vendor_delivery_time['display_format'] : 'date_time'; $wcfm_delivery_time_day_times = isset( $wcfm_vendor_delivery_time['day_times'] ) ? $wcfm_vendor_delivery_time['day_times'] : array(); $wcfm_delivery_time_start_from_options = get_wcfm_start_from_delivery_times_raw(); $wcfm_delivery_time_end_at_options = get_wcfm_end_at_delivery_times_raw(); $wcfm_delivery_time_slots_duration_options = get_wcfm_slots_duration_delivery_times_raw(); $time_format = wc_date_format() . ' ' . wc_time_format(); if ( $wcfm_delivery_time_display_format == 'date' ) { $time_format = wc_date_format(); } elseif ( $wcfm_delivery_time_display_format == 'time' ) { $time_format = wc_time_format(); } $current_time = current_time( 'timestamp' ); $start_time = strtotime( '+' . $wcfm_delivery_time_start_from_options[ $wcfm_delivery_time_start_from ], $current_time ); $end_time = strtotime( '+' . $wcfm_delivery_time_end_at_options[ $wcfm_delivery_time_end_at ], $start_time ); $time_slots = array(); $next_time_slot = $start_time; while ( $end_time > $next_time_slot ) { $week_date = date( 'Y-m-d', $next_time_slot ); $weekday = date( 'N', $next_time_slot ); $weekday -= 1; if ( ! empty( $wcfm_delivery_time_off_days ) ) { if ( in_array( $weekday, $wcfm_delivery_time_off_days ) ) { $next_time_slot = strtotime( '+24 hours', $next_time_slot ); $end_time = strtotime( '+24 hours', $end_time ); continue; } } $time_slots[ $next_time_slot ] = date_i18n( $time_format, $next_time_slot ); $next_time_slot = strtotime( '+' . $wcfm_delivery_time_slots_duration_options[ $wcfm_delivery_time_slots_duration ], $next_time_slot ); } if ( count( $time_slots ) > 1 ) { $time_slots[ $end_time ] = date_i18n( $time_format, $end_time ); } } $time_arr = array(); foreach ( $time_slots as $k => $v ) { $time_arr[] = array( $k => $v ); } $data = array(); for ( $i = 0; $i < count( $time_arr ); $i++ ) { if ( $i == ( count( $time_arr ) - 1 ) ) { break; } $key = key( $time_arr[ $i ] ); $value = current( $time_arr[ $i ] ); $key2 = key( $time_arr[ $i + 1 ] ); $value2 = current( $time_arr[ $i + 1 ] ); if ( $value == $value2 ) { $d = array(); $d['timestamp'] = $key; $d['delivery_date'] = $value; $data[] = $d; break; } $d = array(); $d['timestamp'] = $key . '|' . $key2; if ( $wcfm_delivery_time_display_format == 'date_time' ) { $d['delivery_date'] = $value . '-' . date_i18n( wc_time_format(), $key2 ); } else { $d['delivery_date'] = $value . '-' . $value2; } $data[] = $d; } return $data; } }