949 lines
No EOL
51 KiB
PHP
949 lines
No EOL
51 KiB
PHP
<?php
|
|
|
|
if ( ! defined( 'SOFTOBA_THEME_DIR' ) ) {
|
|
exit( 'No direct script access allowed' );
|
|
}
|
|
|
|
if ( ! class_exists( 'SOFTOBA_Ajax' ) ) {
|
|
|
|
class SOFTOBA_Ajax {
|
|
/**
|
|
* Main Instance
|
|
*
|
|
* @var SOFTOBA_Ajax
|
|
* @since 1.0
|
|
* @access protected
|
|
*/
|
|
protected static $_instance = null;
|
|
|
|
public function __construct() {
|
|
add_action( 'wp_ajax_softoba_first_return_request', array( $this, 'softoba_first_return_request' ) );
|
|
add_action( 'wp_ajax_nopriv_softoba_first_return_request', array( $this, 'softoba_first_return_request' ) );
|
|
add_action( 'wp_ajax_softoba_first_exchange_request', array( $this, 'softoba_first_exchange_request' ) );
|
|
add_action( 'wp_ajax_nopriv_softoba_first_exchange_request', array( $this, 'softoba_first_exchange_request' ) );
|
|
add_action('wp_ajax_softoba_get_product_details', array( $this, 'softoba_get_product_data' ) );
|
|
add_action('wp_ajax_nopriv_softoba_get_product_details', array( $this, 'softoba_get_product_data' ) );
|
|
add_action('wp_ajax_softoba_get_exchange_product_details', array( $this, 'softoba_get_exchange_product_data' ) );
|
|
add_action('wp_ajax_nopriv_softoba_get_exchange_product_details', array( $this, 'softoba_get_exchange_product_data' ) );
|
|
add_action('wp_ajax_softoba_final_return_request', array( $this, 'softoba_final_return_request' ) );
|
|
add_action('wp_ajax_nopriv_softoba_final_return_request', array( $this, 'softoba_final_return_request' ) );
|
|
add_action('wp_ajax_oont_return_products', array( $this, 'oont_return_products' ) );
|
|
add_action('wp_ajax_nopriv_oont_return_products', array( $this, 'oont_return_products' ) );
|
|
add_action('wp_ajax_softoba_final_exchange_request', array( $this, 'softoba_final_exchange_request' ) );
|
|
add_action('wp_ajax_nopriv_softoba_final_exchange_request', array( $this, 'softoba_final_exchange_request' ) );
|
|
add_action('wp_ajax_oont_exchange_products', array( $this, 'oont_exchange_products' ) );
|
|
add_action('wp_ajax_nopriv_oont_exchange_products', array( $this, 'oont_exchange_products' ) );
|
|
add_action('wp_ajax_softoba_pay_exchange_fee', array( $this, 'softoba_pay_exchange_fee' ) );
|
|
add_action('wp_ajax_nopriv_softoba_pay_exchange_fee', array( $this, 'softoba_pay_exchange_fee' ) );
|
|
|
|
add_action( 'wp_ajax_oont_return_attachments', array( $this, 'oont_return_attachments' ) );
|
|
add_action( 'wp_ajax_nopriv_oont_return_attachments', array( $this, 'oont_return_attachments' ) );
|
|
add_action( 'wp_ajax_softoba_change_status', array( $this, 'change_status' ) );
|
|
add_action( 'wp_ajax_softoba_ex_change_status', array( $this, 'ex_change_status' ) );
|
|
|
|
add_action( 'wp_ajax_softoba_quantity_mini_cart', array( $this, 'softoba_quantity_mini_cart' ) );
|
|
add_action( 'wp_ajax_nopriv_softoba_quantity_mini_cart', array( $this, 'softoba_quantity_mini_cart' ) );
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @return SOFTOBA_Ajax Main instance
|
|
* @author Obaid Rahman
|
|
*/
|
|
public static function instance() {
|
|
if ( is_null( self::$_instance ) ) {
|
|
self::$_instance = new self();
|
|
}
|
|
return self::$_instance;
|
|
}
|
|
|
|
public function softoba_first_return_request() {
|
|
if ( isset( $_POST['form_data'] ) ) {
|
|
parse_str( $_POST['form_data'], $form_data );
|
|
$emailcap = isset( $form_data['order_email'] ) ? sanitize_text_field( $form_data['order_email'] ) : '';
|
|
$email=strtolower($emailcap);
|
|
$order_number = isset( $form_data['order_number'] ) ? sanitize_text_field( $form_data['order_number'] ) : '';
|
|
|
|
$json = array();
|
|
|
|
if( ! softoba_check_email_and_order_number($order_number, $email) ){
|
|
$json['type'] = 'error';
|
|
$json['message'] = 'Invalid Email or Order Number';
|
|
wp_send_json( $json );
|
|
}
|
|
|
|
if ( ! softoba_is_order_completed_or_paid( $order_number ) ) {
|
|
$json['type'] = 'error';
|
|
$json['message'] = esc_html__( 'Your order status not paid or completed!', 'astra' );
|
|
wp_send_json( $json );
|
|
}else{
|
|
$existing_return_requests = softoba_check_existing_return_request($order_number, $email);
|
|
if ( ! empty( $existing_return_requests ) ) {
|
|
$json['type'] = 'error';
|
|
if( $existing_return_requests === 'softoba-new' ) {
|
|
$json['message'] = 'You have already submitted a request!';
|
|
}elseif( $existing_return_requests === 'softoba-approved' ){
|
|
$json['message'] = 'Your request status is completed!';
|
|
}else{
|
|
$json['message'] = 'Your request is '.softoba_get_request_status_by_key( $existing_return_requests );
|
|
}
|
|
wp_send_json( $json );
|
|
}else {
|
|
if( softoba_check_order_exchangable($order_number) ) {
|
|
$json['type'] = 'error';
|
|
$json['message'] = 'Your order\'s return period has expired!';
|
|
wp_send_json( $json );
|
|
}else{
|
|
|
|
$order = wc_get_order($order_number);
|
|
$items = $order->get_items();
|
|
$customer_name = $order->get_billing_first_name() . ' ' . $order->get_billing_last_name();
|
|
$customer_tel = $order->get_billing_phone();
|
|
$customer_email = $order->get_billing_email();
|
|
$customer_address = $order->get_formatted_billing_address();
|
|
|
|
ob_start();
|
|
require_once OB_CHILD_THEME_URI . '/inc/templates/return-request.php';
|
|
$output = ob_get_clean();
|
|
|
|
$json['type'] = 'success';
|
|
$json['message'] = 'Redirect to second step';
|
|
$json['output'] = $output;
|
|
wp_send_json( $json );
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
// First step exchange request
|
|
public function softoba_first_exchange_request() {
|
|
if ( isset( $_POST['form_data'] ) ) {
|
|
parse_str( $_POST['form_data'], $form_data );
|
|
$emailcap = isset( $form_data['exchange-order-email'] ) ? sanitize_text_field( $form_data['exchange-order-email'] ) : '';
|
|
$email=strtolower($emailcap);
|
|
$order_number = isset( $form_data['exchange-order-number'] ) ? sanitize_text_field( $form_data['exchange-order-number'] ) : '';
|
|
|
|
$json = array();
|
|
|
|
if( ! wp_verify_nonce( $form_data['exchange_nonce'], 'exchange_request_nonce' ) ) {
|
|
$json['type'] = 'error';
|
|
$json['message'] = esc_html__('Security check failed.');
|
|
wp_send_json( $json );
|
|
}
|
|
|
|
if( ! softoba_check_email_and_order_number($order_number, $email) ){
|
|
$json['type'] = 'error';
|
|
$json['message'] = 'Invalid Email or Order Number';
|
|
wp_send_json( $json );
|
|
}
|
|
|
|
// if ( ! empty( softoba_check_existing_return_request($order_number, $email) ) ) {
|
|
// $json['type'] = 'error';
|
|
// $json['message'] = 'You have already submitted a request for return';
|
|
// wp_send_json( $json );
|
|
// }
|
|
|
|
if( ! softoba_has_variable_product_item( $order_number ) ) {
|
|
$json['type'] = 'error';
|
|
$json['message'] = esc_html__( 'You can only exchange variant products', 'astra' );
|
|
wp_send_json( $json );
|
|
}elseif ( ! softoba_is_order_completed_or_paid( $order_number ) ) {
|
|
$json['type'] = 'error';
|
|
$json['message'] = esc_html__( 'Your order status not paid or completed!', 'astra' );
|
|
wp_send_json( $json );
|
|
}elseif( softoba_check_order_exchangable($order_number) ) {
|
|
$json['type'] = 'error';
|
|
$json['message'] = 'Your order\'s exchange period has expired!';
|
|
wp_send_json( $json );
|
|
}
|
|
|
|
$exchange_fee_status = softoba_exchange_payment_status($order_number, $email);
|
|
if ($exchange_fee_status['status'] === 'pending') {
|
|
$json['type'] = 'error';
|
|
$json['message'] = 'Please pay the exchange shipping fee to proceed!';
|
|
$json['exchange_post_id'] = $exchange_fee_status['post_id'];
|
|
wp_send_json( $json );
|
|
}elseif( $exchange_fee_status['status'] === 'on-hold' ){
|
|
$json['type'] = 'error';
|
|
$json['message'] = 'Your exchange fee status on hold!';
|
|
wp_send_json( $json );
|
|
}
|
|
|
|
$existing_exchange_requests = softoba_check_existing_exchange_request($order_number, $email);
|
|
if ( ! empty( $existing_exchange_requests ) ) {
|
|
$json['type'] = 'error';
|
|
if( $existing_exchange_requests === 'softoba-new' ) {
|
|
$json['message'] = 'You have already submitted a request!';
|
|
}elseif( $existing_exchange_requests === 'softoba-approved' ){
|
|
$json['message'] = 'Your request status is completed!';
|
|
}else{
|
|
$json['message'] = 'Your request status is '.softoba_get_request_status_by_key( $existing_exchange_requests );
|
|
}
|
|
wp_send_json( $json );
|
|
}else{
|
|
$order = wc_get_order($order_number);
|
|
$items = $order->get_items();
|
|
$customer_name = $order->get_billing_first_name() . ' ' . $order->get_billing_last_name();
|
|
$customer_tel = $order->get_billing_phone();
|
|
$customer_email = $order->get_billing_email();
|
|
$customer_address = $order->get_formatted_billing_address();
|
|
|
|
ob_start();
|
|
require_once OB_CHILD_THEME_URI . '/inc/templates/exchange-request.php';
|
|
$output = ob_get_clean();
|
|
|
|
$json['type'] = 'success';
|
|
$json['message'] = 'Redirect to second step';
|
|
$json['output'] = $output;
|
|
wp_send_json( $json );
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
// Get Product card
|
|
public function softoba_get_product_data() {
|
|
$order_id = intval($_POST['order_id']);
|
|
$product_id = intval($_POST['product_id']);
|
|
|
|
$order = wc_get_order($order_id);
|
|
|
|
if ($order) {
|
|
foreach ($order->get_items() as $item) {
|
|
if ($item->get_product_id() === $product_id) {
|
|
// $product = wc_get_product($product_id);
|
|
$variation_id = $item->get_variation_id();
|
|
$product = wc_get_product($variation_id ? $variation_id : $product_id);
|
|
if ($product) {
|
|
$product_name = $item->get_name();
|
|
$product_price = $item->get_total();
|
|
$product_image = $product->get_image();
|
|
$product_quantity = $item->get_quantity();
|
|
|
|
|
|
ob_start(); ?>
|
|
<li class="order_details-item">
|
|
<div class="order_details--row">
|
|
<div class="od_col-left od_product-img">
|
|
<?php echo $product_image; ?>
|
|
</div>
|
|
<div class="od_col-middle od_product-detail">
|
|
<h5><?php echo esc_html( $product_name ); ?></h5>
|
|
<ul>
|
|
<li>Quantity: <span><?php echo esc_html( $product_quantity ); ?></span></li>
|
|
<input type="hidden" name="return_qty" value="1">
|
|
<input type="hidden" name="total_qty" value="<?php echo esc_attr( $product_quantity ); ?>">
|
|
<input type="hidden" name="product_price" value="<?php echo esc_attr( $product_price ); ?>">
|
|
<li><?php echo wc_price($product_price); ?></li>
|
|
</ul>
|
|
</div>
|
|
<div class="od_col-right od_product-option">
|
|
<ul>
|
|
<li class="od_return_reason-option">
|
|
<select name="return_reason" id="ex-product-size" validation="Reason" required>
|
|
<option value="">Reason</option>
|
|
<option value="Wrong Item Received">Wrong Item Received</option>
|
|
<option value="Damaged/Deffective Product">Damaged/Deffective Product</option>
|
|
<option value="Changed My Mind">Changed My Mind</option>
|
|
<option value="Others">Others</option>
|
|
</select>
|
|
</li>
|
|
<li class="od_return_upload">
|
|
<div class="return_file--upload">
|
|
<label for="returnReasonFile">
|
|
<span><i class="bx bx-cloud-upload"></i> Upload</span>
|
|
<input type="file" name="return_upload-file" id="returnReasonFile" class="return_reason-file">
|
|
</label>
|
|
<div id="oont-upload-preview"></div>
|
|
</div>
|
|
</li>
|
|
<li class="od_return-product-comment">
|
|
<textarea type="text" name="return_comment" id="returnComment" class="return__comments" validation="Comments" placeholder="Comments" required=""></textarea>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</li>
|
|
<?php
|
|
$output = ob_get_clean();
|
|
echo $output;
|
|
} else {
|
|
echo 'Product not found.';
|
|
}
|
|
|
|
break;
|
|
}
|
|
}
|
|
} else {
|
|
echo 'Order not found.';
|
|
}
|
|
|
|
wp_die();
|
|
}
|
|
// Get exchange products
|
|
public function softoba_get_exchange_product_data() {
|
|
$order_id = intval($_POST['order_id']);
|
|
$product_id = intval($_POST['product_id']);
|
|
|
|
$order = wc_get_order($order_id);
|
|
|
|
if ($order) {
|
|
foreach ($order->get_items() as $item) {
|
|
if ($item->get_product_id() === $product_id) {
|
|
$variation_id = $item->get_variation_id();
|
|
$product = wc_get_product($product_id);
|
|
if ($product) {
|
|
$product_name = $item->get_name();
|
|
$product_price = $item->get_total();
|
|
$product_image = $product->get_image();
|
|
$product_quantity = $item->get_quantity();
|
|
|
|
// $variation_attributes = $item->get_variation_attributes();
|
|
|
|
ob_start(); ?>
|
|
<li class="order_details-item">
|
|
<div class="order_details--row">
|
|
<div class="od_col-left od_product-img">
|
|
<?php echo $product_image; ?>
|
|
</div>
|
|
<div class="od_col-middle od_product-detail">
|
|
<h5><?php echo esc_html( $product_name ); ?></h5>
|
|
<ul>
|
|
<?php
|
|
if ($product && $product->is_type('variable')) {
|
|
$get_variation = new WC_Product_Variation($variation_id);
|
|
$get_variation_attributes = $get_variation->get_variation_attributes();
|
|
echo '<li>' . wc_get_formatted_variation( $get_variation_attributes, true ) . '</li>';
|
|
}
|
|
?>
|
|
<li>Quantity: <span><?php echo esc_html( $product_quantity ); ?></span></li>
|
|
<input type="hidden" name="order_variation_id" value="<?php echo esc_attr( $variation_id ); ?>">
|
|
<input type="hidden" name="return_qty" value="1">
|
|
<input type="hidden" name="total_qty" value="<?php echo esc_attr( $product_quantity ); ?>">
|
|
<input type="hidden" name="product_price" value="<?php echo esc_attr( $product_price ); ?>">
|
|
<li><?php echo wc_price($product_price); ?></li>
|
|
</ul>
|
|
</div>
|
|
<div class="od_col-right od_product-option">
|
|
<div class="ExchangeBtn">
|
|
<label for="exChangeBtn" class="exchangeBtn-label">Exchange
|
|
<input type="radio" name="ExchangeBtn" id="exChangeBtn" class="exchangeBtn" role="button">
|
|
<span></span>
|
|
</label>
|
|
</div>
|
|
<ul class="od_change-size">
|
|
<li>
|
|
<?php
|
|
// Check if the product is a variable product
|
|
if ($product && $product->is_type('variable')) {
|
|
$available_variations = $product->get_available_variations();
|
|
echo '<select id="ex-product-size" name="selected_variation_id" data-product-id="'.$product_id.'">';
|
|
foreach ($available_variations as $variation) {
|
|
// Get the variation attributes as a formatted string
|
|
// $attributes_str = implode(', ', $variation['attributes']);
|
|
$attributes_str = wc_get_formatted_variation($variation['attributes'], false, false, false);
|
|
// Determine if this variation was ordered
|
|
$is_ordered_variation = $variation['variation_id'] == $variation_id; // Compare with variation_id
|
|
|
|
// Output the option for the variation, and mark it as selected if it was ordered
|
|
echo '<option value="' . $variation['variation_id'] . '" ' . selected($is_ordered_variation, true, false) . '>' . $attributes_str . '</option>';
|
|
}
|
|
echo '</select>';
|
|
}
|
|
?>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</li>
|
|
<?php
|
|
$output = ob_get_clean();
|
|
echo $output;
|
|
} else {
|
|
echo 'Product not found.';
|
|
}
|
|
|
|
break;
|
|
}
|
|
}
|
|
} else {
|
|
echo 'Order not found.';
|
|
}
|
|
|
|
wp_die();
|
|
}
|
|
|
|
// submit final return request
|
|
public function oont_return_products() {
|
|
$json = array();
|
|
if ( isset( $_POST['orderid'] ) ) {
|
|
$orderid = ! empty( $_POST['orderid'] ) ? $_POST['orderid'] : false;
|
|
$softoba_obj = wc_get_order( $orderid );
|
|
$softoba_dis = $softoba_obj->get_discount_total();
|
|
$softoba_cpn_tax = $softoba_obj->get_discount_tax();
|
|
$softoba_dis_tot = $softoba_dis + $softoba_cpn_tax;
|
|
$softoba_dis_tot = 0;
|
|
|
|
$products = [];
|
|
$products['order_id'] = $orderid;
|
|
$products['status'] = 'pending';
|
|
$products['products'] = $_POST['products'];
|
|
|
|
foreach ( $_POST['products'] as $key => $value ) {
|
|
$product_id = isset($value['product_id']) ? intval($value['product_id']) : 0;
|
|
$item_id = isset($value['item_id']) ? intval($value['item_id']) : 0;
|
|
|
|
$products['pids'][] = $product_id;
|
|
$products['itemids'][] = $item_id;
|
|
}
|
|
|
|
$request = new SOFTOBA_Return_Request();
|
|
$request->order_id = $orderid;
|
|
$request->products_data = $products;
|
|
|
|
$save_request = $request->save();
|
|
|
|
if( $save_request ) {
|
|
update_post_meta( $orderid, 'sobaoba_return_products', $products );
|
|
ob_start();
|
|
require_once OB_CHILD_THEME_URI . '/inc/templates/return-thankyou.php';
|
|
$output = ob_get_clean();
|
|
$json['type'] = 'success';
|
|
$json['message'] = 'Request submitted successfully!';
|
|
$json['html'] = $output;
|
|
// Email
|
|
WC()->mailer();
|
|
do_action( 'softoba_return_new_request_user', $save_request );
|
|
do_action( 'softoba_return_new_request_admin', $save_request );
|
|
wp_send_json($json);
|
|
}else{
|
|
$json['type'] = 'error';
|
|
$json['message'] = 'We\'re sorry, something went wrong.';
|
|
wp_send_json($json);
|
|
}
|
|
}
|
|
wp_die();
|
|
}
|
|
|
|
// Submit final return request
|
|
public function softoba_final_return_request() {
|
|
|
|
$json = array();
|
|
|
|
$order_id = ! empty( $_POST['order_id'] ) ? $_POST['order_id'] : false;
|
|
$item_id = ! empty( $_POST['selected-item-id'] ) ? $_POST['selected-item-id'] : false;
|
|
$product_id = ! empty( $_POST['oont-selected-product'] ) ? $_POST['oont-selected-product'] : false;
|
|
$return_reason = ! empty( $_POST['return_reason'] ) ? $_POST['return_reason'] : false;
|
|
$return_comment = ! empty( $_POST['return_comment'] ) ? $_POST['return_comment'] : false;
|
|
$product_price = ! empty( $_POST['product_price'] ) ? $_POST['product_price'] : false;
|
|
$return_qty = ! empty( $_POST['return_qty'] ) ? $_POST['return_qty'] : false;
|
|
$total_qty = ! empty( $_POST['total_qty'] ) ? $_POST['total_qty'] : false;
|
|
$return_file = ! empty( $_FILES['return_upload-file'] ) ? $_FILES['return_upload-file'] : false;
|
|
|
|
if( ! wp_verify_nonce( $_POST['softoba_nonce'], 'return_request_nonce' ) ) {
|
|
$json['type'] = 'error';
|
|
$json['message'] = esc_html__('Security check failed.');
|
|
wp_send_json( $json );
|
|
}
|
|
|
|
if( $return_file ) {
|
|
// Check if the directory exists, create if not
|
|
if (!file_exists(SOFTOBA_UPLOADS_DIR)) {
|
|
wp_mkdir_p(SOFTOBA_UPLOADS_DIR);
|
|
}
|
|
}
|
|
|
|
if ( isset( $_FILES['return_upload-file'] ) && $_FILES['return_upload-file'] ) {
|
|
$tmp_name = $_FILES['return_upload-file']['tmp_name'];
|
|
$upload_file_name = basename( $_FILES['return_upload-file']['name'] );
|
|
$extension = pathinfo( $upload_file_name, PATHINFO_EXTENSION );
|
|
$id_name = uniqid( 'softoba_' ) . '.' . $extension;
|
|
$uploaded_result = move_uploaded_file( $tmp_name, SOFTOBA_UPLOADS_DIR . $id_name );
|
|
}
|
|
|
|
|
|
|
|
if( $order_id ) {
|
|
$request = new SOFTOBA_Return_Request();
|
|
$request->order_id = $order_id;
|
|
$request->product_id = $product_id;
|
|
$request->item_id = $item_id;
|
|
$request->item_total = $product_price;
|
|
$request->qty = $return_qty;
|
|
$request->qty_total = $total_qty;
|
|
$request->item_value = $product_price;
|
|
$request->reason = $return_reason;
|
|
$request->return_comments = $return_comment;
|
|
|
|
$line_tax = wc_get_order_item_meta($item_id, '_line_tax');
|
|
|
|
$request->tax_value = empty( $line_tax ) ? 0 : $line_tax / $request->qty_total;
|
|
$request->tax_total = $request->tax_value * $request->qty_total;
|
|
$request->tax_refund_total = $request->tax_value * $request->qty;
|
|
$line_tax_data = maybe_unserialize( wc_get_order_item_meta( $item_id, '_line_tax_data' ) );
|
|
if ( $line_tax_data ) {
|
|
foreach ( $line_tax_data['total'] as &$tax ) {
|
|
$single_tax_value = $tax / $request->qty_total;
|
|
$tax = $single_tax_value * $request->qty;
|
|
}
|
|
}
|
|
|
|
$request->item_tax_data = $line_tax_data ? $line_tax_data['total'] : ''; // Save only 'total' array.
|
|
$request->item_refund_total = $request->item_value * $request->qty;
|
|
$request->refund_total = $request->item_refund_total + $request->tax_refund_total;
|
|
|
|
|
|
$request->whole_order = 0;
|
|
$request->refund_id = 0;
|
|
$request->refunded_amount = 0;
|
|
$request->coupon_id = 0;
|
|
|
|
if ($uploaded_result) {
|
|
$request->attachments = SOFTOBA_UPLOADS_URL . $id_name;
|
|
} else {
|
|
$request->attachments = null;
|
|
}
|
|
|
|
wc_update_order_item_meta( $request->item_id, '_softoba_item_requested', 'yes' );
|
|
wc_update_order_item_meta( $request->item_id, '_softoba_requested_qty', $request->qty );
|
|
|
|
$save_request = $request->save();
|
|
|
|
if( $save_request ) {
|
|
ob_start();
|
|
require_once OB_CHILD_THEME_URI . '/inc/templates/return-thankyou.php';
|
|
$output = ob_get_clean();
|
|
$json['type'] = 'success';
|
|
$json['message'] = 'Request submitted successfully!';
|
|
$json['html'] = $output;
|
|
wp_send_json($json);
|
|
}else{
|
|
$json['type'] = 'error';
|
|
$json['message'] = 'We\'re sorry, something went wrong.';
|
|
wp_send_json($json);
|
|
}
|
|
|
|
}
|
|
|
|
wp_die();
|
|
}
|
|
|
|
// Return attachments uploads
|
|
public function oont_return_attachments() {
|
|
if ( isset( $_FILES['file'] ) && $_FILES['file'] ) {
|
|
|
|
$json = array();
|
|
// Check if the directory exists, create if not
|
|
if (!file_exists(SOFTOBA_UPLOADS_DIR)) {
|
|
wp_mkdir_p(SOFTOBA_UPLOADS_DIR);
|
|
}
|
|
|
|
$tmp_name = $_FILES['file']['tmp_name'];
|
|
$upload_file_name = basename( $_FILES['file']['name'] );
|
|
$extension = pathinfo( $upload_file_name, PATHINFO_EXTENSION );
|
|
$id_name = uniqid( 'softoba_' ) . '.' . $extension;
|
|
$uploaded_result = move_uploaded_file( $tmp_name, SOFTOBA_UPLOADS_DIR . $id_name );
|
|
|
|
if( $uploaded_result ) {
|
|
$json['type'] = 'success';
|
|
$json['message'] = 'Return attachment uploaded successfully';
|
|
$json['imgurl'] = SOFTOBA_UPLOADS_URL . $id_name;
|
|
wp_send_json( $json );
|
|
}else{
|
|
$json['type'] = 'error';
|
|
$json['message'] = 'Something went wrong, upload again.';
|
|
wp_send_json( $json );
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
public function oont_exchange_products() {
|
|
$json = array();
|
|
if ( isset( $_POST['orderid'] ) ) {
|
|
$orderid = ! empty( $_POST['orderid'] ) ? $_POST['orderid'] : false;
|
|
$softoba_obj = wc_get_order( $orderid );
|
|
$softoba_dis = $softoba_obj->get_discount_total();
|
|
$softoba_cpn_tax = $softoba_obj->get_discount_tax();
|
|
$softoba_dis_tot = $softoba_dis + $softoba_cpn_tax;
|
|
$softoba_dis_tot = 0;
|
|
|
|
$products = [];
|
|
$products['oder_id'] = $orderid;
|
|
$products['status'] = 'pending';
|
|
$products['products'] = $_POST['products'];
|
|
|
|
foreach ( $_POST['products'] as $key => $value ) {
|
|
$product_id = isset($value['product_id']) ? intval($value['product_id']) : 0;
|
|
$item_id = isset($value['item_id']) ? intval($value['item_id']) : 0;
|
|
|
|
$products['pids'][] = $product_id;
|
|
$products['itemids'][] = $item_id;
|
|
}
|
|
|
|
$request = new SOFTOBA_Exchange_Request();
|
|
$request->order_id = $orderid;
|
|
$request->products_data = $products;
|
|
|
|
$save_request = $request->save();
|
|
|
|
if( $save_request ) {
|
|
update_post_meta( $orderid, 'sobaoba_exchange_products', $products );
|
|
ob_start();
|
|
$new_request_id = $save_request;
|
|
require_once OB_CHILD_THEME_URI . '/inc/templates/exchange-thankyou.php';
|
|
$output = ob_get_clean();
|
|
$json['type'] = 'success';
|
|
$json['message'] = 'Exchange Request submitted successfully!';
|
|
$json['html'] = $output;
|
|
// Email
|
|
WC()->mailer();
|
|
do_action( 'softoba_return_new_exchange_user', $save_request );
|
|
do_action( 'softoba_return_new_exchange_admin', $save_request );
|
|
wp_send_json($json);
|
|
}else{
|
|
$json['type'] = 'error';
|
|
$json['message'] = 'We\'re sorry, something went wrong.';
|
|
wp_send_json($json);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
wp_die();
|
|
}
|
|
|
|
// Submit final exchange request
|
|
public function softoba_final_exchange_request() {
|
|
|
|
$json = array();
|
|
// Check nonce
|
|
if( ! wp_verify_nonce( $_POST['exchange_nonce'], 'exchange_nonce' ) ) {
|
|
$json['type'] = 'error';
|
|
$json['message'] = esc_html__('Security check failed.');
|
|
wp_send_json( $json );
|
|
}
|
|
|
|
$order_id = ! empty( $_POST['order_id'] ) ? $_POST['order_id'] : false;
|
|
$item_ids = ! empty( $_POST['selected-item-id'] ) ? $_POST['selected-item-id'] : false;
|
|
$product_ids = ! empty( $_POST['oont-selected-product'] ) ? $_POST['oont-selected-product'] : false;
|
|
$variation_ids = ! empty( $_POST['selected_variation_id'] ) ? $_POST['selected_variation_id'] : false;
|
|
$order_variation_ids = ! empty( $_POST['order_variation_id'] ) ? $_POST['order_variation_id'] : false;
|
|
$product_prices = ! empty( $_POST['product_price'] ) ? $_POST['product_price'] : false;
|
|
$return_qtys = ! empty( $_POST['return_qty'] ) ? $_POST['return_qty'] : false;
|
|
$total_qtys = ! empty( $_POST['total_qty'] ) ? $_POST['total_qty'] : false;
|
|
|
|
// if( ! softoba_has_variable_product_item( $order_id ) ) {
|
|
// $json['type'] = 'error';
|
|
// $json['message'] = esc_html__( 'You can only exchange variant products', 'astra' );
|
|
// wp_send_json( $json );
|
|
// }
|
|
|
|
// if ( ! softoba_is_order_completed_or_paid( $order_id ) ) {
|
|
// $json['type'] = 'error';
|
|
// $json['message'] = esc_html__( 'Your order status not paid or completed!', 'astra' );
|
|
// wp_send_json( $json );
|
|
// }
|
|
|
|
if (isset($_POST['exchange_checkbox']) && is_array($_POST['exchange_checkbox']) && !empty($_POST['exchange_checkbox'])) {
|
|
|
|
if( $order_id ) {
|
|
|
|
$request_items_data = array();
|
|
|
|
// Loop through the items
|
|
foreach ($item_ids as $key => $item_id) {
|
|
// Collect data for each item
|
|
$request_item_data = array(
|
|
'item_id' => $item_id,
|
|
'product_id' => $product_ids[$key],
|
|
'variation_id' => $variation_ids[$key],
|
|
'order_variation_id' => $order_variation_ids[$key],
|
|
'product_price' => $product_prices[$key],
|
|
'return_qty' => $return_qtys[$key],
|
|
'total_qty' => $total_qtys[$key]
|
|
);
|
|
|
|
// Add to the items data array
|
|
$request_items_data[] = $request_item_data;
|
|
}
|
|
|
|
$request = new SOFTOBA_Exchange_Request();
|
|
$request->order_id = $order_id;
|
|
$request->product_id = $product_id;
|
|
$request->item_id = $item_id;
|
|
$request->variation_id = $variation_id;
|
|
$request->order_variation_id = $order_variation_id;
|
|
$request->item_total = $product_price;
|
|
$request->qty = $return_qty;
|
|
$request->qty_total = $total_qty;
|
|
$request->item_value = $product_price;
|
|
|
|
$line_tax = wc_get_order_item_meta($item_id, '_line_tax');
|
|
|
|
$request->tax_value = empty( $line_tax ) ? 0 : $line_tax / $request->qty_total;
|
|
$request->tax_total = $request->tax_value * $request->qty_total;
|
|
$request->tax_refund_total = $request->tax_value * $request->qty;
|
|
$line_tax_data = maybe_unserialize( wc_get_order_item_meta( $item_id, '_line_tax_data' ) );
|
|
if ( $line_tax_data ) {
|
|
foreach ( $line_tax_data['total'] as &$tax ) {
|
|
$single_tax_value = $tax / $request->qty_total;
|
|
$tax = $single_tax_value * $request->qty;
|
|
}
|
|
}
|
|
|
|
$request->item_tax_data = $line_tax_data ? $line_tax_data['total'] : ''; // Save only 'total' array.
|
|
$request->item_refund_total = $request->item_value * $request->qty;
|
|
$request->refund_total = $request->item_refund_total + $request->tax_refund_total;
|
|
|
|
wc_update_order_item_meta( $request->item_id, '_softoba_item_exchange', 'yes' );
|
|
wc_update_order_item_meta( $request->item_id, '_softoba_exchange_qty', $request->qty );
|
|
|
|
$save_request = $request->save();
|
|
|
|
if( $save_request ) {
|
|
ob_start();
|
|
$new_request_id = $save_request;
|
|
require_once OB_CHILD_THEME_URI . '/inc/templates/exchange-thankyou.php';
|
|
$output = ob_get_clean();
|
|
$json['type'] = 'success';
|
|
$json['message'] = 'Exchange Request submitted successfully!';
|
|
$json['html'] = $output;
|
|
wp_send_json($json);
|
|
}else{
|
|
$json['type'] = 'error';
|
|
$json['message'] = 'We\'re sorry, something went wrong.';
|
|
wp_send_json($json);
|
|
}
|
|
|
|
}
|
|
}else{
|
|
$json['type'] = 'error';
|
|
$json['message'] = 'Choose any product to exchange!';
|
|
wp_send_json( $json );
|
|
}
|
|
|
|
wp_die();
|
|
}
|
|
/**
|
|
* Change Request status
|
|
*
|
|
* @return void
|
|
*/
|
|
public function change_status() {
|
|
check_ajax_referer( 'change-status', 'security' );
|
|
$request_id = ! empty( $_POST['softoba_request_id'] ) ? $_POST['softoba_request_id'] : false;
|
|
$status = ! empty( $_POST['softoba_status'] ) ? $_POST['softoba_status'] : false;
|
|
|
|
try {
|
|
if ( ! $request_id || ! $status ) {
|
|
throw new Exception( esc_html__( 'Empty data.', 'astra' ) );
|
|
}
|
|
|
|
if ( ! current_user_can( apply_filters( 'softoba_can_manage_requests', 'manage_woocommerce' ) ) ) {
|
|
throw new Exception( esc_html__( 'You do not have permission to change any request status.', 'astra'
|
|
) );
|
|
}
|
|
|
|
$request = new SOFTOBA_Return_Request( $request_id );
|
|
if ( ! $request->exists() ) {
|
|
throw new Exception( esc_html__( 'Refund request does not exist.', 'astra' ) );
|
|
}
|
|
|
|
switch ( $status ) {
|
|
case 'softoba-rejected' :
|
|
if ( 'softoba-rejected' != $request->status )
|
|
$request->set_rejected();
|
|
break;
|
|
case 'softoba-processing' :
|
|
if ( 'softoba-processing' != $request->status )
|
|
$request->set_processing();
|
|
break;
|
|
case 'softoba-on-hold' :
|
|
if ( 'softoba-on-hold' != $request->status )
|
|
$request->set_on_hold();
|
|
break;
|
|
case 'softoba-close-request' :
|
|
$request->close_request();
|
|
break;
|
|
default :
|
|
throw new Exception( esc_html__( 'Wrong status code.', 'astra' ) );
|
|
break;
|
|
}
|
|
wp_send_json_success();
|
|
|
|
} catch ( Exception $e ) {
|
|
wp_send_json_error( array( 'error' => $e->getMessage() ) );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Change Exchange Request status
|
|
*
|
|
* @return void
|
|
*/
|
|
public function ex_change_status() {
|
|
check_ajax_referer( 'change-status', 'security' );
|
|
$request_id = ! empty( $_POST['softoba_request_id'] ) ? $_POST['softoba_request_id'] : false;
|
|
$status = ! empty( $_POST['softoba_status'] ) ? $_POST['softoba_status'] : false;
|
|
|
|
try {
|
|
if ( ! $request_id || ! $status ) {
|
|
throw new Exception( esc_html__( 'Empty data.', 'astra' ) );
|
|
}
|
|
|
|
if ( ! current_user_can( apply_filters( 'softoba_can_manage_requests', 'manage_woocommerce' ) ) ) {
|
|
throw new Exception( esc_html__( 'You do not have permission to change any request status.', 'astra'
|
|
) );
|
|
}
|
|
|
|
$request = new SOFTOBA_Exchange_Request( $request_id );
|
|
if ( ! $request->exists() ) {
|
|
throw new Exception( esc_html__( 'Refund request does not exist.', 'astra' ) );
|
|
}
|
|
|
|
switch ( $status ) {
|
|
case 'softoba-rejected' :
|
|
if ( 'softoba-rejected' != $request->status )
|
|
$request->set_rejected();
|
|
break;
|
|
case 'softoba-approved' :
|
|
if ( 'softoba-approved' != $request->status )
|
|
$request->set_approved();
|
|
break;
|
|
case 'softoba-processing' :
|
|
if ( 'softoba-processing' != $request->status )
|
|
$request->set_processing();
|
|
break;
|
|
case 'softoba-on-hold' :
|
|
if ( 'softoba-on-hold' != $request->status )
|
|
$request->set_on_hold();
|
|
break;
|
|
case 'softoba-close-request' :
|
|
$request->close_request();
|
|
break;
|
|
default :
|
|
throw new Exception( esc_html__( 'Wrong status code.', 'astra' ) );
|
|
break;
|
|
}
|
|
wp_send_json_success();
|
|
|
|
} catch ( Exception $e ) {
|
|
wp_send_json_error( array( 'error' => $e->getMessage() ) );
|
|
}
|
|
}
|
|
/**
|
|
* Process Exchange fee
|
|
*
|
|
* @return void
|
|
*/
|
|
public function softoba_pay_exchange_fee() {
|
|
$json = array();
|
|
$post_id = isset( $_POST['exchangeId'] ) ? intval( sanitize_text_field( $_POST['exchangeId'] ) ) : null;
|
|
$request = new SOFTOBA_Exchange_Request( $post_id );
|
|
if( $request ) {
|
|
$customer_id = $request->customer_id;
|
|
$unique_id = $request->unique_id;
|
|
$price = $request->price;
|
|
$custom_price = 3;
|
|
|
|
$cart_item_data = [];
|
|
|
|
// Add the form data as cart item attributes
|
|
$cart_item_data['softoba_cart_data']['order_type'] = 'exchange_request';
|
|
$cart_item_data['softoba_cart_data']['post_id'] = $post_id;
|
|
$cart_item_data['softoba_cart_data']['unique_id'] = $unique_id;
|
|
$cart_item_data['softoba_cart_data']['post_permalink'] = get_permalink( $post_id );
|
|
$cart_item_data['softoba_cart_data']['post_author'] = $customer_id;
|
|
$cart_item_data['softoba_cart_data']['price_total'] = $price;
|
|
|
|
// Empty cart first
|
|
WC()->cart->empty_cart();
|
|
// Add to cart
|
|
$cart_item = WC()->cart->add_to_cart( $post_id, 1, '0', array(), $cart_item_data );
|
|
if( $cart_item ) {
|
|
$json['type'] = 'success';
|
|
$json['message'] = esc_html__( 'Added to cart and send checkout page', 'astra' );
|
|
$json['redirect_to'] = wc_get_checkout_url();
|
|
wp_send_json( $json );
|
|
}
|
|
|
|
// echo $price;
|
|
// $error_messages = wc_get_notices('error');
|
|
// print_r( $error_messages );
|
|
// print_r( $cart_item );
|
|
|
|
}else{
|
|
$json['type'] = 'error';
|
|
$json['message'] = esc_html__( 'Something went wrong, pleae try again.', 'astra' );
|
|
wp_send_json( $json );
|
|
}
|
|
wp_die();
|
|
}
|
|
|
|
/**
|
|
* Update quantity mini cart
|
|
*/
|
|
public static function softoba_quantity_mini_cart() {
|
|
|
|
if (!isset($_REQUEST['hash']) || !isset($_REQUEST['quantity'])) {
|
|
wp_die();
|
|
}
|
|
|
|
// Set item key as the hash found in input.qty's name
|
|
$cart_item_key = $_REQUEST['hash'];
|
|
|
|
// Get the array of values owned by the product we're updating
|
|
$product_values = WC()->cart->get_cart_item($cart_item_key);
|
|
|
|
// Get the quantity of the item in the cart
|
|
$product_quantity = apply_filters('woocommerce_stock_amount_cart_item', apply_filters('woocommerce_stock_amount', preg_replace("/[^0-9\.]/", '', filter_var($_REQUEST['quantity'], FILTER_SANITIZE_NUMBER_INT))), $cart_item_key);
|
|
|
|
// Update cart validation
|
|
$passed_validation = apply_filters('woocommerce_update_cart_validation', true, $cart_item_key, $product_values, $product_quantity);
|
|
// Update the quantity of the item in the cart
|
|
if ($passed_validation) {
|
|
WC()->cart->set_quantity($cart_item_key, $product_quantity, true);
|
|
}
|
|
|
|
$woo_mess = wc_print_notices(true);
|
|
$woo_mess = empty($woo_mess) ? '<div class="woocommerce-message text-center" role="alert">' . esc_html__('Product quantity updated successfully!', 'elessi-theme') . '</div>' : $woo_mess;
|
|
|
|
ob_start();
|
|
woocommerce_mini_cart();
|
|
$mini_cart = ob_get_clean();
|
|
|
|
// Fragments and mini cart are returned
|
|
$data = array(
|
|
'fragments' => apply_filters(
|
|
'woocommerce_add_to_cart_fragments',
|
|
array(
|
|
'div.widget_shopping_cart_content' => '<div class="widget_shopping_cart_content">' . $mini_cart . '</div>',
|
|
'.woocommerce-message' => $woo_mess
|
|
)
|
|
),
|
|
'cart_hash' => WC()->cart->get_cart_hash()
|
|
);
|
|
|
|
wp_send_json($data);
|
|
|
|
// wp_send_json_success(
|
|
// array(
|
|
// 'fragments' => apply_filters(
|
|
// 'woocommerce_add_to_cart_fragments',
|
|
// array(
|
|
// 'div.widget_shopping_cart_content' => '<div class="widget_shopping_cart_content">' . $mini_cart . '</div>',
|
|
// '.woocommerce-message' => $woo_mess
|
|
// )
|
|
// ),
|
|
// 'cart_hash' => WC()->cart->get_cart_hash()
|
|
// )
|
|
// );
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
}
|