Current Path : /storage/v11800/andslite-new/public_html/wp-content/plugins/EngageACPlugin/ |
Linux v11800 5.3.0-1023-aws #25~18.04.1-Ubuntu SMP Fri Jun 5 15:19:18 UTC 2020 aarch64
|
Current File : /storage/v11800/andslite-new/public_html/wp-content/plugins/EngageACPlugin/EngageACPlugin.php |
<?php
/*
Plugin Name: Engage Abandon Custom REST API
Description: Custom REST API for User
Version: 1.0.0
Author: Shiprocket
License: GPLv3
*/
define('SR_AC_API_VERSION', '1.0.0');
include_once(ABSPATH . 'wp-admin/includes/plugin.php');
define('JSON_API_USER_HOME', dirname(__FILE__));
add_action('rest_api_init', 'en_abandon_api_hooks');
function en_abandon_api_hooks()
{
register_rest_route(
'/api/v1/sr-engage-abandon-api',
'/get-abandon-orders',
array(
'methods' => 'GET',
'callback' => 'get_item'
)
);
}
function get_item($request)
{
global $wpdb;
if (empty($request->get_headers()['authorization'][0]) || !checkAuthViaToken($request->get_headers()['authorization'][0])) {
return new WP_Error('error', 'Access Denied', array(
'status' => 401, "wc-fetch-source" => "cartbounty",
));
}
$where_condition = $order_by = "";
$per_page = 15;
$param_value = [];
if (!empty($request["from_date"])) {
$where_condition .= " and time>= %s";
$param_value[] = date('Y-m-d H:i:s', strtotime(sanitize_text_field($request["from_date"])));
}
if (!empty($request["to_date"])) {
$where_condition .= " and time<= %s";
$param_value[] = date('Y-m-d H:i:s', strtotime(sanitize_text_field($request["to_date"])));
}
if (!empty($request["order_id"])) {
$where_condition .= "and session_id = %s";
$param_value[] = sanitize_text_field(trim($request["order_id"]));
}
if (!empty($request["per_page"])) {
$per_page = trim($request["per_page"]);
}
$orderby = isset($request['orderby']) ? $request['orderby'] : 'time';
$order = (isset($request['order']) && in_array($request['order'], array('asc', 'desc'))) ? $request['order'] : 'desc';
$table_name = $wpdb->prefix . CARTBOUNTY_TABLE_NAME;
$paged = isset($request['paged']) ? max(0, intval($request['paged']) - 1) : 0;
$total_items = 999999;
$param_value[] = $per_page;
$param_value[] = $paged * $per_page;
$data = $wpdb->get_results(
$wpdb->prepare(
"SELECT * FROM $table_name
WHERE cart_contents != '' AND (email != '' OR phone != '') AND type != 2 $where_condition ORDER BY $orderby $order LIMIT %d OFFSET %d",
$param_value
),
ARRAY_A
);
if (count($data) > 0) {
$response_data = [];
foreach ($data as $key => $value) {
$response_data[$key]["id"] = $value["id"];
$response_data[$key]["name"] = !empty($value["name"]) ? $value["name"] : "";
$response_data[$key]["surname"] = !empty($value["surname"]) ? $value["surname"] : "";
$response_data[$key]["email"] = !empty($value["email"]) ? $value["email"] : "";
$response_data[$key]["phone"] = !empty($value["phone"]) ? $value["phone"] : "";
$response_data[$key]["location"] = !empty($value["location"]) ? unserialize($value["location"]) : "";
$response_data[$key]["cart_contents"] = !empty($value["cart_contents"]) ? unserialize($value["cart_contents"]) : "";
$response_data[$key]["cart_total"] = !empty($value["cart_total"]) ? $value["cart_total"] : 0.00;
$response_data[$key]["currency"] = !empty($value["currency"]) ? $value["currency"] : "INR";
$response_data[$key]["time"] = !empty($value["time"]) ? $value["time"] : NULL;
$response_data[$key]["session_id"] = !empty($value["session_id"]) ? $value["session_id"] : "";
$response_data[$key]["other_fields"] = !empty($value["other_fields"]) ? unserialize($value["other_fields"]) : "";
$response_data[$key]["type"] = isset($value["type"]) ? $value["type"] : 0;
$cart_url = wc_get_cart_url();
$hash = hash_hmac('sha256', $value["email"] . $value["session_id"], CARTBOUNTY_ENCRYPTION_KEY) . '-' . $value["id"]; //Creating encrypted hash with abandoned cart row ID in the end
$response_data[$key]["checkout_url"] = $cart_url . '?cartbounty=' . $hash;
}
return new WP_Error('Success', 'Successfully fetched abandon cart data', array(
"status" => 200,
'wc-fetch-source' => "cartbounty",
"meta" => [
'per_page' => $per_page,
'page' => $paged,
'total' => $total_items
], 'data' => $response_data
));
} else {
return new WP_Error('error', 'No Data Found', array(
'status' => 400, "wc-fetch-source" => "cartbounty",
));
}
}
add_action('rest_api_init', 'en_abandoned_cart_status_api_hooks');
function en_abandoned_cart_status_api_hooks()
{
register_rest_route(
'/api/v1/sr-engage-abandon-api',
'/get-abandon-orders-status',
array(
'methods' => 'POST',
'callback' => 'abandoned_cart_orders_status',
)
);
}
function abandoned_cart_orders_status($request)
{
global $wpdb;
if (empty($request->get_headers()['authorization'][0]) || !checkAuthViaToken($request->get_headers()['authorization'][0])) {
return new WP_Error('error', 'Access Denied', array(
'status' => 401, "wc-fetch-source" => "cartbounty",
));
}
$where_condition = "";
if (empty($request["order_id"])) {
return new WP_Error('error', 'No Order to search order statu', array(
'status' => 400, "wc-fetch-source" => "cartbounty",
));
}
if (!empty($request["order_id"])) {
$order_id = sanitize_text_field($request["order_id"]);
$where_condition = " WHERE session_id IN (" . escape_array(explode(",", $order_id)) . ")";
}
$data = $wpdb->get_results($wpdb->prepare("
SELECT session_id,type,time FROM " . $wpdb->prefix . "" . CARTBOUNTY_TABLE_NAME . " " .
$where_condition . " order by time desc"), ARRAY_A);
if (count($data) > 0) {
$response_data = [];
foreach ($data as $key => $value) {
$response_data[] = [
'session_id' => $value['session_id'],
'order_status' => (int)$value["type"],
'time' => $value['time']
];
}
return new WP_Error(array('data' => $response_data), 200 );
}
return new WP_Error('success', 'Abandoned Cart Order Status', array(
'status' => 200,
'wc-fetch-source' => "cartbounty",
'data' => $response_data
));
}
function escape_array($arr)
{
global $wpdb;
$escaped = array();
foreach ($arr as $k => $v) {
$escaped[] = $wpdb->prepare('%s', $v);
}
return implode(',', $escaped);
}
function checkAuthViaToken($token_passed)
{
$token = "eyJpdiI6ImM4UHdlMFErN0k4NlRjMHdsM015Ync9PSIsInZhbHVlIjoic2pPdE1tQ1JnbWdUT1wvREViNUE1Z2lBMllpTlZoU0pYQ04walZcLzllSWZEWk9NV3M5YjhScnBiUCtIT0JBbzJoTmdtSkJaM3VwdCtlaDZKdlBMUkd4QT09IiwibWFjIjoiYzMxYzhhMmM1MTgxZmU4ZGQ2MDdkYTViZjgwYTFmNjIzMjQxZjg4NmRmMzFiNjg4YzM3Y2U3NzE4ODlhMjZjZiJ9";
if (!empty($token_passed) && strpos($token_passed, $token) !== false) {
return true;
}
return false;
}