admin_url('admin-ajax.php'),
'nonce' => wp_create_nonce('aipa_cart_nonce'),
'analyzing_text' => __('Analyzing...', 'ai-product-assistant'),
'analysis_placeholder' => $cart_analysis_placeholder,
'analysis_button' => $cart_analysis_button_text,
'cart_analysis_title' => $cart_analysis_title,
'cart_analysis_description' => $cart_analysis_description,
'error_message' => __('Something went wrong. Please try again.', 'ai-product-assistant'),
'empty_query_message' => __('Please enter an analysis question.', 'ai-product-assistant'),
'empty_cart_message' => __('Your cart is empty. Add some products first.', 'ai-product-assistant'),
'aipa_service_error_message' => __('Sorry, AI feature is temporarily unavailable. Please try again later.', 'ai-product-assistant'),
'login_url' => function_exists('wc_get_page_permalink') ? wc_get_page_permalink('myaccount') : wp_login_url(get_permalink()),
'login_text' => __('Log in here', 'ai-product-assistant'),
));
// Add custom CSS for cart analysis if set
$cart_analysis_css = isset($options['cart_analysis_css']) ? $options['cart_analysis_css'] : '';
if (!empty($cart_analysis_css)) {
wp_add_inline_style('aipa-cart-css', '.aipa-cart-analysis, .aipa-shortcode-cart-analysis {' . esc_html($cart_analysis_css) . '}');
}
}
}
/**
* Add cart analysis form to WooCommerce cart page
*/
public function add_cart_analysis_form() {
// Only show if cart is not empty
if (WC()->cart->is_empty()) {
return;
}
// Get options for customization
$options = get_option('aipa_settings');
// Default text values
$cart_analysis_title = isset($options['cart_analysis_title']) ? $options['cart_analysis_title'] : __('AI Cart Analysis', 'ai-product-assistant');
$cart_analysis_description = isset($options['cart_analysis_description']) ? $options['cart_analysis_description'] : __('Ask AI if your cart items will work for your specific needs.', 'ai-product-assistant');
$cart_analysis_placeholder = isset($options['cart_analysis_placeholder']) ? $options['cart_analysis_placeholder'] : __('e.g., Can I make a basic home theater with these items?', 'ai-product-assistant');
$cart_analysis_button_text = isset($options['cart_analysis_button_text']) ? $options['cart_analysis_button_text'] : __('Analyze with AI', 'ai-product-assistant');
?>
__('Please log in to use AI cart analysis feature.', 'ai-product-assistant'),
'code' => 'auth_required'
));
}
$query = isset($_POST['query']) ? sanitize_text_field(wp_unslash($_POST['query'])) : '';
AIPA_Debug::log(AIPA_Debug::LEVEL_INFO, 'Cart_Analysis', 'AJAX cart analysis request received', array('query_length' => strlen($query)));
if (empty($query)) {
AIPA_Debug::log(AIPA_Debug::LEVEL_WARNING, 'Cart_Analysis', 'Empty query provided');
wp_send_json_error(array(
'message' => __('Please enter an analysis question.', 'ai-product-assistant')
));
}
if (!function_exists('WC') || !isset(WC()->cart) || WC()->cart->is_empty()) {
AIPA_Debug::log(AIPA_Debug::LEVEL_WARNING, 'Cart_Analysis', 'Cart is empty or WooCommerce not available');
wp_send_json_error(array(
'message' => __('Your cart is empty. Add some products first.', 'ai-product-assistant')
));
}
// Make an internal request to the REST API
$request = new WP_REST_Request('POST', '/aipa/v1/cart-analysis');
$request->set_param('query', $query);
$response = rest_do_request($request);
if (is_wp_error($response)) {
wp_send_json_error(array(
'message' => $response->get_error_message(),
'code' => $response->get_error_code()
));
}
$data = $response->get_data();
// Check if the response contains error information (from wp_send_json_error)
if (isset($data['code']) && isset($data['message'])) {
wp_send_json_error(array(
'message' => $data['message'],
'code' => $data['code']
));
return;
}
if (empty($data) || !isset($data['analysis'])) {
wp_send_json_error(array(
'message' => __('Unable to analyze your cart. Please try again.', 'ai-product-assistant')
));
}
// Generate the HTML for the analysis results
$html = $this->get_analysis_html($data);
wp_send_json_success(array(
'html' => $html
));
}
/**
* Generate HTML for analysis results
*/
private function get_analysis_html($data) {
$output = '';
if (empty($data)) {
return $output;
}
// Main analysis
$output .= '';
$output .= '
' . __('Analysis Result', 'ai-product-assistant') . '
';
$output .= '
' . esc_html($data['analysis']) . '
';
$output .= '
';
// Result summary
$output .= '';
// Compatibility status
$is_complete = isset($data['is_complete']) ? $data['is_complete'] : false;
$status_class = $is_complete ? 'complete' : 'incomplete';
$output .= '
';
$output .= '' . ($is_complete ? '✅' : '⚠️') . '';
$output .= '';
$output .= $is_complete ? __('Your cart contains everything needed!', 'ai-product-assistant') : __('Your cart needs some adjustments.', 'ai-product-assistant');
$output .= '';
$output .= '
';
// Missing items
if (!$is_complete && isset($data['missing_items']) && !empty($data['missing_items'])) {
$output .= '
';
$output .= '
' . __('Missing Items', 'ai-product-assistant') . '
';
$output .= '
';
foreach ($data['missing_items'] as $item) {
$output .= '- ' . esc_html($item) . '
';
}
$output .= '
';
$output .= '
';
}
// Compatibility issues
if (isset($data['compatibility_issues']) && !empty($data['compatibility_issues'])) {
$output .= '
';
$output .= '
' . __('Compatibility Issues', 'ai-product-assistant') . '
';
$output .= '
';
foreach ($data['compatibility_issues'] as $issue) {
$output .= '- ' . esc_html($issue) . '
';
}
$output .= '
';
$output .= '
';
}
// Recommendations
if (isset($data['recommendations']) && !empty($data['recommendations'])) {
$output .= '
';
$output .= '
' . __('Recommendations', 'ai-product-assistant') . '
';
$output .= '
';
foreach ($data['recommendations'] as $recommendation) {
$output .= '- ' . esc_html($recommendation) . '
';
}
$output .= '
';
$output .= '
';
}
$output .= '
'; // End analysis summary
return $output;
}
}