Files
roi-theme/wp-content/plugins/wp-marketing-automations/includes/api/carts/class-bwfan-api-cart-view-tasks.php
root a22573bf0b Commit inicial - WordPress Análisis de Precios Unitarios
- WordPress core y plugins
- Tema Twenty Twenty-Four configurado
- Plugin allow-unfiltered-html.php simplificado
- .gitignore configurado para excluir wp-config.php y uploads

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-03 21:04:30 -06:00

141 lines
5.7 KiB
PHP
Executable File

<?php
class BWFAN_API_Carts_View_Tasks extends BWFAN_API_Base {
public static $ins;
public $task_localized = [];
public $total_count = 0;
public function __construct() {
parent::__construct();
$this->method = WP_REST_Server::READABLE;
$this->route = '/carts/(?P<abandoned_id>[\\d]+)/tasks/';
}
public static function get_instance() {
if ( null === self::$ins ) {
self::$ins = new self();
}
return self::$ins;
}
public function default_args_values() {
return [
'abandoned_id' => '',
];
}
public function process_api_call() {
$abandoned_id = $this->args['abandoned_id'];
if ( empty( $abandoned_id ) ) {
return $this->error_response( __( 'Abandoned cart is missing', 'wp-marketing-automations' ) );
}
$type = $this->args['type'];
global $wpdb;
$cart_details = [];
$basic_details = [];
if ( 'recovered' === $type ) {
if ( BWF_WC_Compatibility::is_hpos_enabled() ) {
$query = $wpdb->prepare( "SELECT `order_id` FROM {$wpdb->prefix}wc_orders_meta WHERE `meta_key` = %s AND `meta_value`= %d", '_bwfan_recovered_ab_id', $abandoned_id );
$order_id = $wpdb->get_var( $query ); //phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
} else {
$query = $wpdb->prepare( "SELECT `post_id` FROM {$wpdb->prefix}postmeta WHERE `meta_key` = %s AND `meta_value`= %d", '_bwfan_recovered_ab_id', $abandoned_id );
$order_id = $wpdb->get_var( $query ); //phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
}
if ( empty( $order_id ) ) {
return $this->error_response( __( 'Abandoned cart data is missing', 'wp-marketing-automations' ) );
}
$order = wc_get_order( $order_id );
if ( ! $order instanceof WC_Order ) {
return $this->error_response( __( 'Order is missing', 'wp-marketing-automations' ) );
}
$cart_details['email'] = $order->get_meta( '_billing_email' );
$basic_details['email'] = $cart_details['email'];
$basic_details['f_name'] = $order->get_meta( '_billing_first_name' );
$basic_details['l_name'] = $order->get_meta( '_billing_last_name' );
} else {
$cart_details = BWFAN_Model_Abandonedcarts::get( $abandoned_id );
if ( empty( $cart_details ) ) {
return $this->error_response( __( 'Abandoned cart data is missing', 'wp-marketing-automations' ) );
}
$cart_data = json_decode( $cart_details['checkout_data'], true );
$basic_details['email'] = $cart_details['email'];
$basic_details['f_name'] = isset( $cart_data['fields'] ) && isset( $cart_data['fields']['billing_first_name'] ) ? $cart_data['fields']['billing_first_name'] : '';
$basic_details['l_name'] = isset( $cart_data['fields'] ) && isset( $cart_data['fields']['billing_last_name'] ) ? $cart_data['fields']['billing_last_name'] : '';
}
$arr = [ 'v1' => [], 'v2' => [] ];
/** Automation v1 */
$cart_tasks = [];
/** Automation v2 */
$cart_automations = [];
if ( BWFAN_Common::is_automation_v1_active() ) {
$cart_tasks = BWFAN_Recoverable_Carts::get_cart_tasks( $abandoned_id );
$arr['v1'] = $cart_tasks;
}
$cart_email = $cart_details['email'];
$table1 = $wpdb->prefix . 'bwfan_automation_contact';
$table2 = $wpdb->prefix . 'bwfan_automation_complete_contact';
$query1 = "SELECT * FROM $table1 WHERE `event` LIKE 'ab_cart_abandoned' AND `data` LIKE '%cart_abandoned_id\":\"{$abandoned_id}\"%' AND data LIKE '%email\":\"{$cart_email}\"%'";
$result1 = $wpdb->get_results( $query1, ARRAY_A ); //phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$query2 = "SELECT * FROM $table2 WHERE `event` LIKE 'ab_cart_abandoned' AND `data` LIKE '%cart_abandoned_id\":\"{$abandoned_id}\"%' AND data LIKE '%email\":\"{$cart_email}\"%'";
$result2 = $wpdb->get_results( $query2, ARRAY_A ); //phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
if ( ! empty( $result1 ) ) {
foreach ( $result1 as $a_contact ) {
$event_slug = $a_contact['event'];
$event_obj = BWFAN_Core()->sources->get_event( $event_slug );
$event_name = ! empty( $event_obj ) ? $event_obj->get_name() : '';
$automation_data = BWFAN_Model_Automations_V2::get_automation( $a_contact['aid'] );
unset( $a_contact['data'] );
$a_contact['event'] = $event_name;
$a_contact['automation_title'] = $automation_data['title'];
$a_contact['e_time'] = isset( $a_contact['e_time'] ) ? date( 'Y-m-d H:i:s', $a_contact['e_time'] ) : '';
$a_contact['last_time'] = isset( $a_contact['last_time'] ) ? date( 'Y-m-d H:i:s', $a_contact['last_time'] ) : '';
$cart_automations[] = array_merge( $a_contact, $basic_details );
}
}
if ( ! empty( $result2 ) ) {
foreach ( $result2 as $a_contact ) {
$event_slug = $a_contact['event'];
$event_obj = BWFAN_Core()->sources->get_event( $event_slug );
$event_name = ! empty( $event_obj ) ? $event_obj->get_name() : '';
$automation_data = BWFAN_Model_Automations_V2::get_automation( $a_contact['aid'] );
unset( $a_contact['data'] );
$a_contact['last_time'] = isset( $a_contact['c_date'] ) ? $a_contact['c_date'] : '';
$a_contact['event'] = $event_name;
$a_contact['automation_title'] = $automation_data['title'];
$cart_automations[] = array_merge( $a_contact, $basic_details );
}
}
$msg = __( 'Automation tasks found', 'wp-marketing-automations' );
if ( empty( $cart_tasks ) && empty( $cart_automations ) ) {
$msg = __( 'No automation found for cart id: ', 'wp-marketing-automations' ) . $abandoned_id;
}
if ( ! empty( $cart_automations ) ) {
$arr['v2'] = $cart_automations;
}
return $this->success_response( $arr, $msg );
}
}
BWFAN_API_Loader::register( 'BWFAN_API_Carts_View_Tasks' );