$statusCode,
]
);
}
protected function find_image_id( $image ) {
$image_id = attachment_url_to_postid( stripslashes( $image ) );
return $image_id;
}
protected function http_check( $url ) {
if ( ( ! ( substr( $url, 0, 7 ) == 'http://' ) ) && ( ! ( substr( $url, 0, 8 ) == 'https://' ) ) ) {
return false;
}
return true;
}
/// GET FUNCTIONS
public function get_delivery_profile( $user_id ) {
$data['first_name'] = get_user_meta( $user_id, 'billing_first_name', true );
$data['last_name'] = get_user_meta( $user_id, 'billing_last_name', true );
$data['phone'] = get_user_meta( $user_id, 'billing_phone', true );
return new WP_REST_Response(
[
'status' => 'success',
'response' => $data,
],
200
);
}
public function update_vendor_profile( $request, $user_id ) {
$data = json_decode( $request, true );
$vendor_data = get_user_meta( $user_id, 'wcfmmp_profile_settings', true );
if ( is_string( $vendor_data ) ) {
$vendor_data = [];
}
}
public function get_delivery_stat( $user_id ) {
$results = [];
if ( is_plugin_active( 'wc-multivendor-marketplace/wc-multivendor-marketplace.php' ) ) {
global $wpdb;
$sql = "SELECT COUNT(ID) FROM `{$wpdb->prefix}wcfm_delivery_orders`";
$sql .= ' WHERE 1=1';
$sql .= " AND delivery_boy = {$user_id}";
$sql .= ' AND is_trashed = 0';
$total = count( $wpdb->get_results( $sql ) );
$pending_sql = $sql . " AND delivery_status = 'pending' GROUP BY order_id";
$delivered_sql = $sql . " AND delivery_status = 'delivered' GROUP BY order_id";
$pending_count = count( $wpdb->get_results( $pending_sql ) );
$delivered_count = count( $wpdb->get_results( $delivered_sql ) );
$results = [
'delivered' => $delivered_count,
'pending' => $pending_count,
'total' => $total,
];
}
return new WP_REST_Response(
[
'status' => 'success',
'response' => $results,
],
200
);
}
public function get_delivery_order( $user_id, $request ) {
$api = new WC_REST_Orders_V1_Controller();
$order = [];
if ( is_plugin_active( 'wc-multivendor-marketplace/wc-multivendor-marketplace.php' ) ) {
global $wpdb;
$table_name = $wpdb->prefix . 'wcfm_delivery_orders';
$sql = "SELECT * FROM `{$table_name}`";
$sql .= ' WHERE 1=1';
$sql .= " AND delivery_boy = {$user_id}";
$sql .= ' AND is_trashed = 0';
$order_id = sanitize_text_field( $request['id'] );
if ( isset( $order_id ) ) {
if ( is_numeric( $order_id ) ) {
$sql .= " AND order_id = '{$order_id}'";
}
}
$items = $wpdb->get_results( $sql );
if ( ! empty( $items ) ) {
$vendor = new FlutterWCFMHelper();
$order = wc_get_order( $items[0]->order_id );
$response = $api->prepare_item_for_response( $order, $request );
$order = $response->get_data();
$count = count( $order['line_items'] );
$order['product_count'] = $count;
for ( $i = 0; $i < $count; $i++ ) {
$product_id = absint( $order['line_items'][ $i ]['product_id'] );
$image = wp_get_attachment_image_src( get_post_thumbnail_id( $product_id ) );
if ( ! is_null( $image[0] ) ) {
$order['line_items'][ $i ]['featured_image'] = $image[0];
}
$vendor_data = $vendor->flutter_get_wcfm_stores_by_id( $items[0]->vendor_id );
$order['wcfm_store'] = $vendor_data->data;
}
$order['delivery_status'] = $items[0]->delivery_status;
if ( apply_filters( 'wcfmmp_is_allow_checkout_user_location', true ) ) {
$address = get_post_meta( $order['id'], '_wcfmmp_user_location', true );
$lat = get_post_meta( $order['id'], '_wcfmmp_user_location_lat', true );
$lng = get_post_meta( $order['id'], '_wcfmmp_user_location_lng', true );
if ( $address ) {
$order['user_location'] = [
'address' => $address,
'lat' => $lat,
'lng' => $lng,
];
}
}
}
}
return new WP_REST_Response(
[
'status' => 'success',
'response' => $order,
],
200
);
}
public function get_delivery_stores( $user_id, $request ) {
global $wpdb;
$table_name = $wpdb->prefix . 'wcfm_delivery_orders';
$sql = "SELECT $table_name.`vendor_id` FROM `{$table_name}`";
$sql .= ' WHERE 1=1';
$sql .= " AND delivery_boy = {$user_id}";
$sql .= ' AND is_trashed = 0';
$sql .= " AND delivery_status = 'pending'";
$sql .= " GROUP BY $table_name.`vendor_id`";
$items = $wpdb->get_results( $sql );
$vendor = new FlutterWCFMHelper();
$stores = [];
foreach ( $items as $item ) {
$vendor_data = $vendor->flutter_get_wcfm_stores_by_id( $item->vendor_id );
$stores[] = $vendor_data->data;
}
return new WP_REST_Response(
[
'status' => 'success',
'response' => $stores,
],
200
);
}
public function get_delivery_orders( $user_id, $request ) {
$api = new WC_REST_Orders_V1_Controller();
$results = [];
if ( is_plugin_active( 'wc-multivendor-marketplace/wc-multivendor-marketplace.php' ) ) {
global $wpdb;
$page = 1;
$per_page = 10;
if ( isset( $request['page'] ) ) {
$page = sanitize_text_field( $request['page'] );
if ( ! is_numeric( $page ) ) {
$page = 1;
}
}
if ( isset( $request['per_page'] ) ) {
$per_page = sanitize_text_field( $request['per_page'] );
if ( ! is_numeric( $per_page ) ) {
$per_page = 10;
}
}
$page = ( $page - 1 ) * $per_page;
$table_name = $wpdb->prefix . 'wcfm_delivery_orders';
$sql = "SELECT * FROM `{$table_name}`";
$sql .= ' WHERE 1=1';
$sql .= " AND delivery_boy = {$user_id}";
$sql .= ' AND is_trashed = 0';
if ( isset( $request['status'] ) && ! empty( $request['status'] ) ) {
$status = sanitize_text_field( $request['status'] );
$sql .= " AND delivery_status = '{$status}'";
}
if ( isset( $request['search'] ) ) {
$order_search = sanitize_text_field( $request['search'] );
$sql .= " AND $table_name.`order_id` LIKE '%{$order_search}%'";
}
$sql .= " GROUP BY $table_name.`order_id` ORDER BY $table_name.`order_id` DESC LIMIT $per_page OFFSET $page";
$items = $wpdb->get_results( $sql );
$vendor = new FlutterWCFMHelper();
foreach ( $items as $item ) {
$order = wc_get_order( $item->order_id );
if ( is_bool( $order ) ) {
continue;
}
$response = $api->prepare_item_for_response( $order, $request );
$order = $response->get_data();
$count = count( $order['line_items'] );
$order['product_count'] = $count;
for ( $i = 0; $i < $count; $i++ ) {
$product_id = absint( $order['line_items'][ $i ]['product_id'] );
$image = wp_get_attachment_image_src( get_post_thumbnail_id( $product_id ) );
if ( ! is_null( $image[0] ) ) {
$order['line_items'][ $i ]['featured_image'] = $image[0];
}
$vendor_data = $vendor->flutter_get_wcfm_stores_by_id( $item->vendor_id );
$order['wcfm_store'] = $vendor_data->data;
}
$order['delivery_status'] = $item->delivery_status;
if ( apply_filters( 'wcfmmp_is_allow_checkout_user_location', true ) ) {
$address = get_post_meta( $order['id'], '_wcfmmp_user_location', true );
$lat = get_post_meta( $order['id'], '_wcfmmp_user_location_lat', true );
$lng = get_post_meta( $order['id'], '_wcfmmp_user_location_lng', true );
if ( $address ) {
$order['user_location'] = [
'address' => $address,
'lat' => $lat,
'lng' => $lng,
];
}
}
$results[] = $order;
}
}
return new WP_REST_Response(
[
'status' => 'success',
'response' => $results,
],
200
);
}
function get_notification( $request, $user_id ) {
global $WCFM, $wpdb;
$wcfm_messages = [];
if ( isset( $request['per_page'] ) && $request['per_page'] ) {
$limit = $request['per_page'];
$offset = $request['page'];
if ( isset( $offset ) ) {
$offset = sanitize_text_field( $offset );
if ( ! is_numeric( $offset ) ) {
$offset = 1;
}
}
if ( isset( $limit ) ) {
$limit = sanitize_text_field( $limit );
if ( ! is_numeric( $limit ) ) {
$limit = 10;
}
}
$offset = ( $offset - 1 ) * $limit;
$message_to = $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} ) AND message_type = 'delivery_boy_assign'";
$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 new WP_REST_Response(
[
'status' => 'success',
'response' => $wcfm_messages,
],
200
);
}
function update_delivery_profile( $request, $user_id ) {
$is_pw_correct = true;
$pass = sanitize_text_field( $request['password'] );
$new_pass = sanitize_text_field( $request['new_password'] );
$first_name = sanitize_text_field( $request['first_name'] );
$last_name = sanitize_text_field( $request['last_name'] );
$phone = sanitize_text_field( $request['phone'] );
$data = [ 'ID' => $user_id ];
if ( isset( $params->display_name ) ) {
$user_update['first_name'] = $params->first_name;
}
if ( isset( $params->display_name ) ) {
$user_update['last_name'] = $params->last_name;
}
if ( isset( $first_name ) ) {
$data['first_name'] = $first_name;
update_user_meta( $user_id, 'billing_first_name', $first_name, '' );
wp_update_user(
[
'ID' => $user_id,
'first_name' => $first_name,
]
);
}
if ( isset( $last_name ) ) {
$data['last_name'] = $last_name;
update_user_meta( $user_id, 'billing_last_name', $last_name, '' );
wp_update_user(
[
'ID' => $user_id,
'last_name' => $last_name,
]
);
}
if ( isset( $phone ) ) {
update_user_meta( $user_id, 'billing_phone', $phone, '' );
}
if ( ! empty( $data ) ) {
wp_update_user( $data, $user_id );
}
return new WP_REST_Response(
[
'status' => 'success',
'response' => 1,
],
200
);
}
function update_delivery_order( $order_id ) {
global $WCFM, $WCFMd, $wpdb;
$delivered_not_notified = false;
$sql = "SELECT * FROM `{$wpdb->prefix}wcfm_delivery_orders`";
$sql .= ' WHERE 1=1';
$sql .= " AND order_id = {$order_id}";
$delivery_details = $wpdb->get_results( $sql );
if ( ! empty( $delivery_details ) ) {
foreach ( $delivery_details as $delivery_detail ) {
$delivery_id = $delivery_detail->ID;
// Update Delivery Order Status Update
$wpdb->update(
"{$wpdb->prefix}wcfm_delivery_orders",
[
'delivery_status' => 'delivered',
'delivery_date' => date(
'Y-m-d H:i:s',
current_time( 'timestamp', 0 )
),
],
[ 'ID' => $delivery_id ],
[ '%s', '%s' ],
[ '%d' ]
);
$order = wc_get_order( $delivery_detail->order_id );
$wcfm_delivery_boy_user = get_userdata( $delivery_detail->delivery_boy );
if ( apply_filters( 'wcfm_is_show_marketplace_itemwise_orders', true ) ) {
// Admin Notification
$wcfm_messages = sprintf( __( 'Order %1$s item %2$s delivered by %3$s.', 'wc-frontend-manager-delivery' ), '#' . $order->get_order_number() . '', get_the_title( $delivery_detail->product_id ), '' . $wcfm_delivery_boy_user->first_name . ' ' . $wcfm_delivery_boy_user->last_name . '' );
$WCFM->wcfm_notification->wcfm_send_direct_message( -2, 0, 0, 0, $wcfm_messages, 'delivery_complete' );
// Vendor Notification
if ( $delivery_detail->vendor_id ) {
$WCFM->wcfm_notification->wcfm_send_direct_message( -1, $delivery_detail->vendor_id, 1, 0, $wcfm_messages, 'delivery_complete' );
}
// Order Note
$wcfm_messages = sprintf( __( 'Order %1$s item %2$s delivered by %3$s.', 'wc-frontend-manager-delivery' ), '#' . $order->get_order_number() . '', get_the_title( $delivery_detail->product_id ), $wcfm_delivery_boy_user->first_name . ' ' . $wcfm_delivery_boy_user->last_name );
$comment_id = $order->add_order_note( $wcfm_messages, apply_filters( 'wcfm_is_allow_delivery_note_to_customer', '1' ) );
do_action( 'wcfmd_after_order_item_mark_delivered', $delivery_detail->order_id, $delivery_detail->product_id, $delivery_detail );
} elseif ( ! $delivered_not_notified ) {
// Admin Notification
$wcfm_messages = sprintf( __( 'Order %1$s delivered by %2$s.', 'wc-frontend-manager-delivery' ), '#' . $order->get_order_number() . '', '' . $wcfm_delivery_boy_user->first_name . ' ' . $wcfm_delivery_boy_user->last_name . '' );
$WCFM->wcfm_notification->wcfm_send_direct_message( -2, 0, 0, 0, $wcfm_messages, 'delivery_complete' );
// Vendor Notification
if ( $delivery_detail->vendor_id ) {
$WCFM->wcfm_notification->wcfm_send_direct_message( -1, $delivery_detail->vendor_id, 1, 0, $wcfm_messages, 'delivery_complete' );
}
// Order Note
$wcfm_messages = sprintf( __( 'Order %1$s delivered by %2$s.', 'wc-frontend-manager-delivery' ), '#' . $order->get_order_number() . '', $wcfm_delivery_boy_user->first_name . ' ' . $wcfm_delivery_boy_user->last_name );
$comment_id = $order->add_order_note( $wcfm_messages, apply_filters( 'wcfm_is_allow_delivery_note_to_customer', '1' ) );
do_action( 'wcfmd_after_order_mark_delivered', $delivery_detail->order_id, $delivery_detail );
$delivered_not_notified = true;
}
}
return new WP_REST_Response(
[
'status' => 'success',
'response' => 1,
],
200
);
}
return new WP_REST_Response(
[
'status' => 'success',
'response' => -1,
],
200
);
}
}