Uname:Linux ip-11-115-0-196 6.8.0-1039-aws #41~22.04.1-Ubuntu SMP Thu Sep 11 10:54:48 UTC 2025 x86_64

403WebShell
403Webshell
Server IP : 13.126.101.145  /  Your IP : 216.73.217.37
Web Server : Apache/2.4.52 (Ubuntu)
System : Linux ip-11-115-0-196 6.8.0-1039-aws #41~22.04.1-Ubuntu SMP Thu Sep 11 10:54:48 UTC 2025 x86_64
User : www-data ( 33)
PHP Version : 8.3.17
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /var/www/html/rentals_updated/wp-content/plugins/custom-email-enhance/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/html/rentals_updated/wp-content/plugins/custom-email-enhance/custom-email.php
<?php
/**
 * Plugin Name: Custom Emails Enhance
 * Description: Adds custom email notifications for quotations in WooCommerce
 * Version: 3
 * Author:iTrosys
 * Developper : Bhaskara
 * Requires at least: 5.0
 * Requires PHP: 7.2
 * WC requires at least: 3.0
 * WC tested up to: 8.0
 */

if (!defined('ABSPATH')) exit;

define('CUSTOM_EMAIL_PATH', plugin_dir_path(__FILE__));

// Enhanced Debug logging function
function quotation_log($message, $type = 'debug') {
    if (WP_DEBUG === true) {
        $log_file = WP_CONTENT_DIR . '/debug.log';
        $timestamp = current_time('mysql');
        $formatted_message = "[{$timestamp}] [{$type}] ";
        
        if (is_array($message) || is_object($message)) {
            $formatted_message .= print_r($message, true);
        } else {
            $formatted_message .= $message;
        }
        
        error_log($formatted_message . PHP_EOL, 3, $log_file);
    }
}

// Check WooCommerce and dependencies
function check_dependencies() {
    if (!class_exists('WooCommerce')) {
        quotation_log('WooCommerce not found', 'error');
        return false;
    }
    
    if (!class_exists('WC_Email')) {
        quotation_log('WC_Email class not found', 'error');
        return false;
    }
    
    return true;
}

// Declare HPOS compatibility
function declare_hpos_compatibility() {
    if (class_exists('\Automattic\WooCommerce\Utilities\FeaturesUtil')) {
        \Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility('custom_order_tables', __FILE__, true);
    }
}
add_action('before_woocommerce_init', 'declare_hpos_compatibility');


add_action('woocommerce_init', 'custom_email_includes');
function custom_email_includes() {
    if (!check_dependencies()) {
        return;
    }
    
    $quotation_class_path = CUSTOM_EMAIL_PATH . 'includes/class-wc-custom-email-quotation.php';
    $rfq_class_path = CUSTOM_EMAIL_PATH . 'includes/class-wc-custom-email-rfq.php';
    $agreement_class_path = CUSTOM_EMAIL_PATH . 'includes/class-wc-custom-email-agreement.php';
    $fleet_class_path = CUSTOM_EMAIL_PATH . 'includes/class-wc-custom-email-fleet.php';
    $status_change_class_path = CUSTOM_EMAIL_PATH . 'includes/class-wc-custom-email-status-change.php';
    $sos_class_path = CUSTOM_EMAIL_PATH . 'includes/class-wc-custom-email-sos.php';
    $used_enquiry_class_path = CUSTOM_EMAIL_PATH . 'includes/class-wc-custom-email-used-enquiry.php';
    $contract_renewal_class_path = CUSTOM_EMAIL_PATH . 'includes/class-wc-custom-email-contract-renewal.php';
    $sapid_class_path = CUSTOM_EMAIL_PATH . 'includes/class-wc-custom-email-sapid.php';
    $invoice_class_path = CUSTOM_EMAIL_PATH . 'includes/class-wc-custom-email-invoice.php';
    $modify_rfq_class_path = CUSTOM_EMAIL_PATH . 'includes/class-wc-custom-email-modifyrfq.php';
    $discount_rfq_class_path = CUSTOM_EMAIL_PATH . 'includes/class-wc-custom-email-discountrfq.php';
    $new_contract_class_path = CUSTOM_EMAIL_PATH . 'includes/class-wc-custom-email-new-contract.php';



    if (file_exists($quotation_class_path)) {
        require_once $quotation_class_path;
    } else {
        quotation_log("Quotation email class file not found at: {$quotation_class_path}", 'error');
    }
    
    if (file_exists($rfq_class_path)) {
        require_once $rfq_class_path;
    } else {
        quotation_log("RFQ email class file not found at: {$rfq_class_path}", 'error');
    }
    if (file_exists($modify_rfq_class_path)) {
        require_once $modify_rfq_class_path;
    } else {
        quotation_log("RFQ email class file not found at: {$modify_rfq_class_path}", 'error');
    }
    if (file_exists($discount_rfq_class_path)) {
        require_once $discount_rfq_class_path;
    } else {
        quotation_log("RFQ email class file not found at: {$discount_rfq_class_path}", 'error');
    }
    if (file_exists($agreement_class_path)) {
        require_once $agreement_class_path;
    } else {
        quotation_log("Agreement email class file not found at: {$agreement_class_path}", 'error');
    }
    if (file_exists($new_contract_class_path)) {
        require_once $new_contract_class_path;
    } else {
        quotation_log("Agreement email class file not found at: {$new_contract_class_path}", 'error');
    }
    if (file_exists($fleet_class_path)) {
        require_once $fleet_class_path;
    } else {
        quotation_log("Agreement email class file not found at: {$fleet_class_path}", 'error');
    }
    if (file_exists($status_change_class_path)) {
        require_once $status_change_class_path;
    } else {
        quotation_log("Agreement email class file not found at: {$status_change_class_path}", 'error');
    }
    if (file_exists($sos_class_path)) {
        require_once $sos_class_path;
    } else {
        quotation_log("Agreement email class file not found at: {$sos_class_path}", 'error');
    }
    if (file_exists($used_enquiry_class_path)) {
        require_once $used_enquiry_class_path;
    } else {
        quotation_log("Used Enquiry email class file not found at: {$used_enquiry_class_path}", 'error');
    }
    if (file_exists($contract_renewal_class_path)) {
        require_once $contract_renewal_class_path;
    } else {
        quotation_log("Contract Renewal email class file not found at: {$contract_renewal_class_path}", 'error');
    }
    if (file_exists($sapid_class_path)) {
        require_once $sapid_class_path;
    } else {
        quotation_log("SAP ID email class file not found at: {$sapid_class_path}", 'error');
    }
    if (file_exists($invoice_class_path)) {
        require_once $invoice_class_path;
    } else {
        quotation_log("invoice email class file not found at: {$invoice_class_path}", 'error');
    }
}

function add_custom_email_classes($email_classes) {
    if (!check_dependencies()) {
        return $email_classes;
    }
    
    // Include files if not already included
    if (!class_exists('WC_Custom_Email_Quotation') || !class_exists('WC_Custom_Email_Rfq') || !class_exists('WC_Custom_Email_Agg') || !class_exists('WC_Custom_Email_Fleet') || !class_exists('WC_Custom_Email_Status')) {
        custom_email_includes();
    }
    
    
    // Add RFQ email class
    if (class_exists('WC_Custom_Email_Rfq')) {
        $email_classes['WC_Custom_Email_Rfq'] = new WC_Custom_Email_Rfq();
        quotation_log('RFQ email class added successfully');
    }
     // Add Modify RFQ email class
     if (class_exists('WC_Custom_Email_Modify_Rfq')) {
        $email_classes['WC_Custom_Email_Modify_Rfq'] = new WC_Custom_Email_Modify_Rfq();
        quotation_log('Modify RFQ email class added successfully');
    }
    // Add Quotation email class
    if (class_exists('WC_Custom_Email_Quotation')) {
        $email_classes['WC_Custom_Email_Quotation'] = new WC_Custom_Email_Quotation();
        quotation_log('Quotation email class added successfully');
    }
        // Add Discount RFQ email class
    if (class_exists('WC_Custom_Email_Discount_Rfq')) {
        $email_classes['WC_Custom_Email_Discount_Rfq'] = new WC_Custom_Email_Discount_Rfq();
        quotation_log('Discount RFQ email class added successfully');
    }
    // Add Agreement email class
    if (class_exists('WC_Custom_Email_Agg')) {
        $email_classes['WC_Custom_Email_Agg'] = new WC_Custom_Email_Agg();
        quotation_log('Agreement email class added successfully');
    }
    // Add Agreement email class
    if (class_exists('WC_Custom_Email_New_Contract')) {
        $email_classes['WC_Custom_Email_New_Contract'] = new WC_Custom_Email_New_Contract();
        quotation_log('New Contract email class added successfully');
    }
    // Add Status-Change email class
     if (class_exists('WC_Custom_Email_Status')) {
        $email_classes['WC_Custom_Email_Status'] = new WC_Custom_Email_Status();
        quotation_log('Agreement email class added successfully');
    }
    // add Invoice email class
    if (class_exists('WC_Custom_Email_Invoice')) {
        $email_classes['WC_Custom_Email_Invoice'] = new WC_Custom_Email_Invoice();
        quotation_log('Invoice email class added successfully');
    }
     // add contract Renewal email class
     if (class_exists('WC_Custom_Email_Contract_Renewal')) {
        $email_classes['WC_Custom_Email_Contract_Renewal'] = new WC_Custom_Email_Contract_Renewal();
        quotation_log('Contract Renewal email class added successfully');
    }
    // add contract Renewal email class
    if (class_exists('WC_Custom_Email_Sapid')) {
        $email_classes['WC_Custom_Email_Sapid'] = new WC_Custom_Email_Sapid();
        quotation_log('SAP ID email class added successfully');
    }
     // Add Fleet email class
     if (class_exists('WC_Custom_Email_Fleet')) {
        $email_classes['WC_Custom_Email_Fleet'] = new WC_Custom_Email_Fleet();
        quotation_log('Agreement email class added successfully');
    }
    // Add SOS email class
    // if (class_exists('WC_Custom_Email_Sos')) {
    //     $email_classes['WC_Custom_Email_Sos'] = new WC_Custom_Email_Sos();
    //     quotation_log('Agreement email class added successfully');
    // }
    // add Used Enquiry email class
    if (class_exists('WC_Custom_Email_Used_Enquiry')) {
        $email_classes['WC_Custom_Email_Used_Enquiry'] = new WC_Custom_Email_Used_Enquiry();
        quotation_log('Agreement email class added successfully');
    }
    
    return $email_classes;
}
add_filter('woocommerce_email_classes', 'add_custom_email_classes', 20);



// Test email template loading for both templates
add_action('init', function() {
    $quotation_template = CUSTOM_EMAIL_PATH . 'templates/emails/quotation-notification.php';
    $rfq_template = CUSTOM_EMAIL_PATH . 'templates/emails/rfq-notification.php';
    $agreement_template = CUSTOM_EMAIL_PATH . 'templates/emails/agreement-notification.php';
    $fleet_template = CUSTOM_EMAIL_PATH . 'templates/emails/plain/fleet-notification.php';
    $status_change_template = CUSTOM_EMAIL_PATH . 'templates/emails/status-change-notification.php';
    $sos_template = CUSTOM_EMAIL_PATH . 'templates/emails/plain/sos-notification.php';
    $used_enquiry_template = CUSTOM_EMAIL_PATH . 'templates/emails/used-enquiry-template.php';
    $contract_renewal_template = CUSTOM_EMAIL_PATH . 'templates/emails/contract-renewal-template.php';
    $sapid_template = CUSTOM_EMAIL_PATH . 'templates/emails/sapid-templet.php';
    $invoice_template = CUSTOM_EMAIL_PATH . 'templates/emails/invoice-template.php';
    $modify_rfq_template = CUSTOM_EMAIL_PATH . 'templates/emails/modify-rfq-template.php';
    $discount_rfq_template = CUSTOM_EMAIL_PATH . 'templates/emails/discount-rfq-template.php';
    $new_contract_template = CUSTOM_EMAIL_PATH . 'templates/emails/new-contract-template.php';

    
    quotation_log('Quotation template exists: ' . (file_exists($quotation_template) ? 'yes' : 'no'));
    quotation_log('RFQ template exists: ' . (file_exists($rfq_template) ? 'yes' : 'no'));
    quotation_log('Agreement template exists: ' . (file_exists($agreement_template) ? 'yes' : 'no'));
    quotation_log('Fleet template exists: ' . (file_exists($fleet_template) ? 'yes' : 'no'));
    quotation_log('Status template exists: ' . (file_exists($status_change_template) ? 'yes' : 'no'));
    quotation_log('SOS template exists: ' . (file_exists($sos_template) ? 'yes' : 'no'));
    quotation_log('Used Enquiry template exists: ' . (file_exists($used_enquiry_template) ? 'yes' : 'no'));
    quotation_log('Contract Renewal template exists: ' . (file_exists($contract_renewal_template) ? 'yes' : 'no'));
    quotation_log('SAP ID template exists: ' . (file_exists($sapid_template) ? 'yes' : 'no'));
    quotation_log('Invoice template exists: ' . (file_exists($invoice_template) ? 'yes' : 'no'));
    quotation_log('Modify RFQ template exists: ' . (file_exists($modify_rfq_template) ? 'yes' : 'no'));
    quotation_log('Discount RFQ template exists: ' . (file_exists($discount_rfq_template) ? 'yes' : 'no'));
    quotation_log('New Contract template exists: ' . (file_exists($new_contract_template) ? 'yes' : 'no'));


});

//Test WooCommerce email integration:

add_action('woocommerce_init', function() {
    $mailer = WC()->mailer();
    $emails = $mailer->get_emails();
    quotation_log('Available emails: ' . print_r(array_keys($emails), true));
});


// Add this new function to handle the AJAX request
function handle_send_quotation_email() {
    check_ajax_referer('send_quotation_email_nonce', 'nonce');

    $quotation_id = isset($_POST['quotation_id']) ? intval($_POST['quotation_id']) : 0;

    if (!$quotation_id) {
        quotation_log('Invalid quotation ID: ' . $quotation_id, 'error');
        wp_send_json_error('Invalid quotation ID');
        return;
    }

    $quotation_data = get_quotation_data($quotation_id);

    if (!$quotation_data) {
        quotation_log('Quotation not found for ID: ' . $quotation_id, 'error');
        wp_send_json_error('Quotation not found');
        return;
    }

    quotation_log('Attempting to send email for quotation ID: ' . $quotation_id);

    // Trigger the email notification
    $result = do_action('quotation_created_notification', $quotation_id, $quotation_data);

    quotation_log('Email notification action result: ' . print_r($result, true));

    // Update the quotation status
    global $wpdb;
    $table_name = $wpdb->prefix . 'quotation';
    $update_result = $wpdb->update(
        $table_name,
        array('qt_status' => 'Quote Send to Customer'),
        array('id' => $quotation_id),
        array('%s'),
        array('%d')
    );

    if ($update_result === false) {
        quotation_log('Failed to update quotation status. SQL Error: ' . $wpdb->last_error, 'error');
    } else {
        quotation_log('Quotation status updated successfully');
    }

  
}
add_action('wp_ajax_send_quotation_email', 'handle_send_quotation_email');


// Add this function to get quotation data
function get_quotation_data($quotation_id) {
    global $wpdb;
    $table_name = $wpdb->prefix . 'quotation';
    
    $quotation = $wpdb->get_row($wpdb->prepare(
        "SELECT * FROM {$table_name} WHERE id = %d",
        $quotation_id
    ), ARRAY_A);

    if (!$quotation) {
        return false;
    }

    return array(
        'id' => $quotation_id,
        'customer_name' => $quotation['user_name'],
        'customer_email' => $quotation['user_email'],
        'product_id' => $quotation['product_id'],
        'product_name' => $quotation['product_name'],
        'start_date' => $quotation['start_date'],
        'end_date' => $quotation['end_date'],
        'shift' => $quotation['shift'],
        'total' => $quotation['final_price'],
        'status' => $quotation['qt_status'],
        'hire_charges' => $quotation['dynamic_terms_1'],
        'other_terms' => $quotation['dynamic_terms_2']

    );
}


//RFQ section 

function handle_send_rfq_email() {
    check_ajax_referer('send_rfq_email_nonce', 'nonce');

    $user_id = isset($_POST['user_id']) ? intval($_POST['user_id']) : 0;

    if (!$user_id) {
        quotation_log('Invalid user ID: ' . $user_id, 'error');
        wp_send_json_error('Invalid user ID');
        return;
    }

    $user_data = get_userdata($user_id);

    if (!$user_data) {
        quotation_log('User not found for ID: ' . $user_id, 'error');
        wp_send_json_error('User not found');
        return;
    }

    quotation_log('Attempting to send email for user ID: ' . $user_id);

    // Get the latest RFQ data for this user
    global $wpdb;
    $table_name = $wpdb->prefix . 'request_quote';
    $rfq_data = $wpdb->get_row($wpdb->prepare(
        "SELECT * FROM {$table_name} WHERE user_id = %d ORDER BY id DESC LIMIT 1",
        $user_id
    ), ARRAY_A);

    if (!$rfq_data) {
        quotation_log('No RFQ data found for user ID: ' . $user_id, 'error');
        wp_send_json_error('No RFQ data found');
        return;
    }

    // Prepare RFQ data for email
    $rfq_email_data = array(
        'id' => $rfq_data['id'],
        'customer_name' => $user_data->display_name,
        'customer_email' => $user_data->user_email,
        'product_id' => $rfq_data['product_id'],
        'product_name' => get_the_title($rfq_data['product_id']),
        'start_date' => $rfq_data['start_date'],
        'end_date' => $rfq_data['end_date'],
        'shift' => $rfq_data['shift'],
        'location' => $rfq_data['location'],
        'application' => $rfq_data['application'],
        'calculated_price' => $rfq_data['calculated_price'],
        'status' => 'Pending'
    );

    // Trigger the email notification
    $result = do_action('rfq_created_notification', $rfq_data['id'], $rfq_email_data);

    quotation_log('Email notification action result: ' . print_r($result, true));

    wp_send_json_success('RFQ email sent successfully');
}
add_action('wp_ajax_send_rfq_email', 'handle_send_rfq_email');
add_action('wp_ajax_nopriv_send_rfq_email', 'handle_send_rfq_email');

// Modify RFQ
function handle_send_modify_rfq_email() {
    check_ajax_referer('send_modify_rfq_email_nonce', 'nonce');

    $rfq_id = isset($_POST['rfq_id']) ? intval($_POST['rfq_id']) : 0;

    if (!$rfq_id) {
        quotation_log('Invalid RFQ ID: ' . $rfq_id, 'error');
        wp_send_json_error('Invalid RFQ ID');
        return;
    }

    
    quotation_log('Attempting to send email for user ID: ' . $user_id);

    // Get the latest RFQ data for this user
    global $wpdb;
    $table_name = $wpdb->prefix . 'request_quote';
    $rfq_data = $wpdb->get_row($wpdb->prepare(
        "SELECT * FROM {$table_name} WHERE id = %d",
        $rfq_id
    ), ARRAY_A);

    if (!$rfq_data) {
        quotation_log('No RFQ data found for user ID: ' . $user_id, 'error');
        wp_send_json_error('No RFQ data found');
        return;
    }
    $user_data = get_userdata($rfq_data['user_id']);
    

    // Prepare RFQ data for email
    $rfq_email_data = array(
        'id' => $rfq_data['id'],
        'customer_name' => $user_data->display_name,
        'customer_email' => $user_data->user_email,
        'product_id' => $rfq_data['product_id'],
        'product_name' => get_the_title($rfq_data['product_id']),
        'start_date' => $rfq_data['start_date'],
        'end_date' => $rfq_data['end_date'],
        'shift' => $rfq_data['shift'],
        'location' => $rfq_data['location'],
        'application' => $rfq_data['application'],
        'calculated_price' => $rfq_data['calculated_price'],
        'status' => 'Pending'
    );

    // Trigger the email notification
    $result = do_action('modify_rfq_created_notification', $rfq_data['id'], $rfq_email_data);

    quotation_log('Email notification action result: ' . print_r($result, true));

    wp_send_json_success('RFQ email sent successfully');
}
add_action('wp_ajax_send_modify_rfq_email', 'handle_send_modify_rfq_email');
add_action('wp_ajax_nopriv_send_modify_rfq_email', 'handle_send_modify_rfq_email');

function handle_send_discount_rfq_email() {
    check_ajax_referer('send_discount_rfq_email_nonce', 'nonce');

    $qt_id = isset($_POST['qt_id']) ? intval($_POST['qt_id']) : 0;
    $status = isset($_POST['status']) ? sanitize_text_field($_POST['status']) : '';
    if (!$qt_id) {
        quotation_log('Invalid RFQ ID: ' . $qt_id, 'error');
        wp_send_json_error('Invalid RFQ ID');
        return;
    }

    
    quotation_log('Attempting to send email for user ID: ' . $user_id);

    

    global $wpdb;
    $table_name = $wpdb->prefix . 'discount_approval';
    $qt_data = $wpdb->get_row($wpdb->prepare(
        "SELECT * FROM {$table_name} WHERE id = %d ORDER BY id DESC LIMIT 1",
        $qt_id
    ), ARRAY_A);

    if (!$qt_data) {
        quotation_log('No Quote data found for user ID: ' . $qt_id, 'error');
        wp_send_json_error('No Quote data found');
        return;
    }
    $user_data = get_userdata($qt_data['user_id']);
    // Prepare RFQ data for email
    $qt_email_data = array(
        'id' => $qt_data['id'],
        'customer_name' => $user_data->display_name,
        'customer_email' => $user_data->user_email,
        // 'product_id' => $qt_data['product_id'],
        'product_name' => get_the_title($qt_data['product_id']),
        'start_date' => $qt_data['start_date'],
        'end_date' => $qt_data['end_date'],
        'shift' => $qt_data['shift'],
        'total' => $quotation['final_price'],
        'status' =>  $qt_data['status'],
        'discount' => $qt_data['discount'],
        'request_by' => $qt_data['requested_by']
    );

    // Trigger the email notification
    $result = do_action('discount_rfq_created_notification', $rfq_data['id'], $qt_email_data);

    quotation_log('Email notification action result: ' . print_r($result, true));

    wp_send_json_success('RFQ email sent successfully');
}
add_action('wp_ajax_send_discount_rfq_email', 'handle_send_discount_rfq_email');
add_action('wp_ajax_nopriv_send_discount_rfq_email', 'handle_send_discount_rfq_email');


// Aggriment Section

function handle_send_agg_email() {
    check_ajax_referer('send_agg_email_nonce', 'nonce');

    $qt_id = isset($_POST['qt_id']) ? intval($_POST['qt_id']) : 0;

    if (!$qt_id) {
        quotation_log('Invalid Quote ID: ' . $qt_id, 'error');
        wp_send_json_error('Invalid user ID');
        return;
    }

    // $qt_data = get_userdata($qt_id);

    // if (!$qt_data) {
    //     quotation_log('User not found for ID: ' . $user_id, 'error');
    //     wp_send_json_error('User not found');
    //     return;
    // }

    // quotation_log('Attempting to send email for user ID: ' . $user_id);

    // Get the latest RFQ data for this user
    global $wpdb;
    $table_name = $wpdb->prefix . 'quotation';
    $qt_data = $wpdb->get_row($wpdb->prepare(
        "SELECT * FROM {$table_name} WHERE id = %d ORDER BY id DESC LIMIT 1",
        $qt_id
    ), ARRAY_A);

    if (!$qt_data) {
        quotation_log('No Quote data found for user ID: ' . $qt_id, 'error');
        wp_send_json_error('No Quote data found');
        return;
    }
    $user_data = get_userdata($qt_data['user_id']);
    // Prepare RFQ data for email
    $qt_email_data = array(
        'id' => $qt_data['id'],
        'customer_name' => $user_data->display_name,
        'customer_email' => $qt_data['user_email'],
        'product_id' => $qt_data['product_id'],
        'product_name' => get_the_title($qt_data['product_id']),
        'start_date' => $qt_data['start_date'],
        'end_date' => $qt_data['end_date'],
        'shift' => $qt_data['shift'],
        'total' => $quotation['final_price'],
        'status' =>  $qt_data['qt_status']
    );

    // Trigger the email notification
    $result = do_action('agg_created_notification', $qt_data['id'], $qt_email_data);

    quotation_log('Email notification action result: ' . print_r($result, true));

    wp_send_json_success('Aggrement email sent successfully');
}
add_action('wp_ajax_send_agg_email', 'handle_send_agg_email');
add_action('wp_ajax_nopriv_send_agg_email', 'handle_send_agg_email');


// Fleet Add / Remove

function handle_send_fleet_email($product_id, $action) {
    // Check if product exists
    $product = wc_get_product($product_id);
    if (!$product && $action !== 'deleted') {
        return;
    }

    // Prepare product data
    $product_data = array(
        'id' => $product_id,
        'name' => $product ? $product->get_name() : 'Unknown',
        'sku' => $product ? $product->get_sku() : 'N/A',
        'action' => $action // 'added', 'deleted', or 'trashed'
    );

    // Trigger the email notification
    do_action('fleet_notification', $product_id, $product_data);
}

add_action('transition_post_status', 'trigger_fleet_email_on_publish', 10, 3);

function trigger_fleet_email_on_publish($new_status, $old_status, $post) {
    if (($new_status === 'publish') && ($old_status !== 'publish') && 
        (in_array($post->post_type, ['product', 'product_variation']))) {
        handle_send_fleet_email($post->ID, 'added');
    }
}
// Hook into product trashing
add_action('wp_trash_post', 'trigger_fleet_email_on_trash', 10, 1);

function trigger_fleet_email_on_trash($post_id) {
    if (get_post_type($post_id) === 'product' || get_post_type($post_id) === 'product_variation') {
        handle_send_fleet_email($post_id, 'trashed');
    }
}

// Hook into product deletion
add_action('before_delete_post', 'trigger_fleet_email_on_delete', 10, 1);

function trigger_fleet_email_on_delete($post_id) {
    if (get_post_type($post_id) === 'product' || get_post_type($post_id) === 'product_variation') {
        handle_send_fleet_email($post_id, 'deleted');
    }
}


// Function to handle AJAX request for sending fleet change email
function handle_send_fleet_email_ajax() {
    check_ajax_referer('send_fleet_email_nonce', 'nonce');

    $product_id = isset($_POST['product_id']) ? intval($_POST['product_id']) : 0;
    $action = isset($_POST['action']) ? sanitize_text_field($_POST['action']) : '';

    if (!$product_id || !in_array($action, ['added', 'deleted'])) {
        wp_send_json_error('Invalid product ID or action');
        return;
    }

    handle_send_fleet_email($product_id, $action);
    wp_send_json_success('Fleet change email sent successfully');
}
add_action('wp_ajax_send_fleet_email', 'handle_send_fleet_email_ajax');
add_action('wp_ajax_nopriv_send_fleet_email', 'handle_send_fleet_email_ajax');



// Status Change 


// Hook into WooCommerce order status change
add_action('woocommerce_order_status_changed', 'trigger_email_on_status_change', 10, 4);

function trigger_email_on_status_change($order_id, $old_status, $new_status, $order) {
    // Check if order exists and is valid
    if (!$order || !$order_id) {
        return;
    }

    // Get WooCommerce email classes
    $emails = WC()->mailer()->get_emails();

    // Trigger default WooCommerce emails
    switch ($new_status) {
        // case 'processing':
        //     if (isset($emails['WC_Email_Customer_Processing_Order'])) {
        //         $emails['WC_Email_Customer_Processing_Order']->trigger($order_id);
        //     }
        //     break;
        case 'completed':
            if (isset($emails['WC_Email_Customer_Completed_Order'])) {
                $emails['WC_Email_Customer_Completed_Order']->trigger($order_id);
            }
            break;
        // Add more cases for other status changes if needed
    }

    // Trigger custom status change email
    do_action('status_created_notification', $order_id, $new_status);
}

// Function to handle AJAX request for sending status change email
function handle_send_status_email() {
    check_ajax_referer('send_status_email_nonce', 'nonce');

    $order_id = isset($_POST['order_id']) ? intval($_POST['order_id']) : 0;
    $new_status = isset($_POST['new_status']) ? sanitize_text_field($_POST['new_status']) : '';

    if (!$order_id || !$new_status) {
        wp_send_json_error('Invalid order ID or status');
        return;
    }

    do_action('status_created_notification', $order_id, $new_status);
    wp_send_json_success('Status email sent successfully');
}
add_action('wp_ajax_send_status_email', 'handle_send_status_email');
add_action('wp_ajax_nopriv_send_status_email', 'handle_send_status_email');

// SOS 

function handle_send_sso_email() {
    check_ajax_referer('send_sso_email_nonce', 'nonce');

    $sos_id = isset($_POST['sos_id']) ? intval($_POST['sos_id']) : 0;

    if (!$sos_id) {
        quotation_log('Invalid Quote ID: ' . $sos_id, 'error');
        wp_send_json_error('Invalid user ID');
        return;
    }

    global $wpdb;
    $table_name = $wpdb->prefix . 'sos';
    $sos_data = $wpdb->get_row($wpdb->prepare(
        "SELECT * FROM {$table_name} WHERE sos_id = %d",
        $sos_id
    ), ARRAY_A);

    if (!$sos_data) {
        wp_send_json_error('SOS data not found');
        return;
    }

    $user_data = get_userdata($qt_data['user_id']);
    // Prepare RFQ data for email
    $sos_data = array(
        'id' => $sos_data['id'],
        'operator_id' => $sos_data['operator_id'],
        'sos_message' => $qt_data['sos_message']
    );

    // Trigger the email notification
    $result = do_action('sos_created_notification', $sos_data['id'], $sos_data);

    quotation_log('Email notification action result: ' . print_r($result, true));

    wp_send_json_success('SOS email sent successfully');
}
add_action('wp_ajax_send_sos_email', 'handle_send_sos_email');
add_action('wp_ajax_nopriv_send_sos_email', 'handle_send_sos_email');

//SAP ID update 

function handle_send_sapid_email($user_id, $sapid_data) {
    if (!$user_id) {
        error_log('Invalid User ID: ' . $user_id);
        return;
    }

    $user_data = get_userdata($user_id);
    $sap_id = get_user_meta($user_id, 'sap_customer_id', true);

    if (!$sap_id) {
        error_log('SAP ID missing for User ID: ' . $user_id);
        return;
    }

    // Trigger WooCommerce custom email class
    $email_instance = new WC_Custom_Email_Sapid();
    // $email_instance->trigger($user_id, $sapid_data);

    error_log('SAPID email triggered for User ID: ' . $user_id);
}
add_action('sapid_created_notification', 'handle_send_sapid_email', 10, 2);


function handle_send_used_enquiry_email($used_enquiry_id) {
    if (empty($used_enquiry_id)) {
        error_log('No Enquiry ID provided.');
        return;
    }

    if (!class_exists('WC_Custom_Email_Used_Enquiry')) {
        error_log('WC_Custom_Email_Used_Enquiry class not found.');
        return;
    }

    global $wpdb;
    $table_name = $wpdb->prefix . 'used_product_enquiry';

    // Fetch enquiry data
    $used_enquiry_data = $wpdb->get_row($wpdb->prepare(
        "SELECT * FROM {$table_name} WHERE id = %d",
        $used_enquiry_id
    ), ARRAY_A);

    if (empty($used_enquiry_data)) {
        error_log("No enquiry data found for ID: $used_enquiry_id");
        return;
    }

    error_log("Enquiry Data: " . print_r($used_enquiry_data, true));

    $email_instance = new WC_Custom_Email_Used_Enquiry();
    $email_result = $email_instance->trigger($used_enquiry_id, $used_enquiry_data);

    if ($email_result) {
        error_log("Used Enquiry Email Triggered for Enquiry ID: $used_enquiry_id");
    } else {
        error_log("Failed to trigger Used Enquiry Email for Enquiry ID: $used_enquiry_id");
    }
}
add_action('used_enquiry_created_notification', 'handle_send_used_enquiry_email', 10, 2);
// Contract Renuval 
function handle_send_contract_renewal_email($contract_renewal_id) {
    // check_ajax_referer('send_contract_renewal_email_nonce', 'nonce');

    // $contract_renewal_id = isset($_POST['contract_id']) ? intval($_POST['contract_id']) : 0;

    if (!$contract_renewal_id) {
        error_log('Invalid Contract ID: ' . $contract_renewal_id, 'error');
        return;
    }

    $contract_renewal_data = get_contract_renewal_data($contract_renewal_id);

    if (!$contract_renewal_data) {
        error_log('Contract not found for ID: ' . $contract_renewal_id, 'error');
        return;
    }
    if (!class_exists('WC_Custom_Email_Contract_Renewal')) {
        error_log('Email class WC_Custom_Email_Contract_Renewal not found.');
        return;
    }

    $email_instance = new WC_Custom_Email_Contract_Renewal();
    $email_result = $email_instance->trigger($contract_renewal_id, $contract_renewal_data);

    if ($email_result) {
        error_log("Contract Renewal Email Triggered for Enquiry ID: $contract_renewal_id");
    } else {
        error_log("Failed to trigger Contract Renewal Email for Enquiry ID: $contract_renewal_id");
    }


    
}
add_action('contract_renewal_created_notification', 'handle_send_contract_renewal_email', 10, 2);

// add_action('wp_ajax_send_contract_renewal_email', 'handle_send_contract_renewal_email');


// // Add this function to get contract_renewal data
function get_contract_renewal_data($contract_renewal_id) {
    global $wpdb;
    $table_name = $wpdb->prefix . 'contract_renewal';
    
    $contract_renewal = $wpdb->get_row($wpdb->prepare(
        "SELECT * FROM {$table_name} WHERE id = %d",
        $contract_renewal_id
    ), ARRAY_A);

    $user_data = get_userdata($contract_renewal['user_id']);
    $user_email = $user_data->user_email;
    if (!$contract_renewal) {
        return false;
    }

    return array(
        'id' => $contract_renewal_id,
        'user_id' => $contract_renewal['user_id'],
        'customer_email' => $user_email,
        'contract_id' => $contract_renewal['contract_id'],
        'extended_date_by_user' => $contract_renewal['extended_date_by_user'],
        'extended_date_by_admin' => $contract_renewal['extended_date_by_admin'],
        

    );
}

//Invoice 

function handle_send_invoie_email($sales_order_id, $invoice_data) {
    if (!$sales_order_id) {
        error_log('Invalid User ID: ' . $sales_order_id);
        return;
    }

    

    // Trigger WooCommerce custom email class
    $email_instance = new WC_Custom_Email_Invoice();
    $email_instance->trigger($sales_order_id, $invoice_data);

    error_log('Invoice email triggered for User ID: ' . $sales_order_id);
}

add_action('invoice_created_notification', 'handle_send_invoice_email', 10, 2);



// Hook to add the Settings menu for email
add_action('admin_menu', 'add_email_settings_menu');

function add_email_settings_menu() {
    // Check if the current user is a central administrator
    if (current_user_can('central_administrator')) {
        // Add a parent menu itemas settings that directly links to the WooCommerce Email settings
        add_menu_page(
            __('Settings'), 
            __('Settings'), 
            'central_administrator',  
            'email-settings',     
            'redirect_to_wc_email_settings',  
            'dashicons-admin-settings',       
            99                   
        );
    }
}

// Redirect to WooCommerce Email Settings tab
function redirect_to_wc_email_settings() {
    if (current_user_can('central_administrator')) {
        wp_safe_redirect(admin_url('admin.php?page=wc-settings&tab=email'));
        exit;
    } else {
        wp_die(__('You do not have permission to access this page.'));
    }
}

// Hide the WooCommerce tabs for central_administrator role
add_action('admin_head', 'hide_wc_settings_tabs_css_for_administrator');
function hide_wc_settings_tabs_css_for_administrator() {
    if (current_user_can('central_administrator')) {
        echo '<style>
            .woocommerce-layout__header-navigation,
            .nav-tab-wrapper {
                display: none !important;
            }
            #email_notification_settings-description {
                display:none
            }
        </style>';
    }
}

// Hide EmailKit column
add_action('admin_footer', 'remove_emailkit_column');

function remove_emailkit_column() {
    $screen = get_current_screen();
    if ($screen && $screen->id === 'woocommerce_page_wc-settings' && isset($_GET['tab']) && $_GET['tab'] === 'email') {
        ?>
        <script type="text/javascript">
        jQuery(document).ready(function($) {
            function removeEmailkitColumn() {
                // Remove the column header
                $('th.wc-email-settings-table-template').remove();

                // Remove the column cells
                $('td.wc-email-settings-table-template').remove();

                // Adjust colspan of the footer
                var columnCount = $('.wc-emails').find('thead th').length;
                $('.wc-emails tfoot th').attr('colspan', columnCount);
            }

            // Run on page load
            removeEmailkitColumn();

            // Run again when AJAX requests complete (for dynamic content)
            $(document).ajaxComplete(function() {
                removeEmailkitColumn();
            });
        });
        </script>
        <?php
    }
}

// Hiding un used touch points

// add_filter('woocommerce_email_classes', 'disable_specific_woocommerce_emails');

// function disable_specific_woocommerce_emails($email_classes) {
//     // Unset the email classes for the touchpoints you want to disable
//     unset($email_classes['WC_Email_Failed_Order']);         // Disable "Failed Order"
//     unset($email_classes['WC_Email_Customer_Refunded_Order']); // Disable "Refund Order"
//     unset($email_classes['WC_Email_Customer_Note']);        // Disable "Customer Note"
//     unset($email_classes['WC_Email_Customer_Invoice']);        // Disable "Order Details" (example)
//     unset( $email_classes['WC_Email_New_Order'] ); // Remove New Order Email
//     unset( $email_classes['WC_Email_Customer_Processing_Order'] ); // Remove Processing Order Email


//     return $email_classes;
// }

// hide screen options
function hide_screen_options_for_email_notification() {
    ?>
    <style>
   <?php if (isset($_GET['page'], $_GET['tab']) && $_GET['page'] === 'wc-settings' && $_GET['tab'] === 'email') : ?>
        #screen-meta-links {
            display: none !important;
        }
    <?php endif; ?>
    </style>
    <?php
}
add_action('admin_head', 'hide_screen_options_for_email_notification');

Youez - 2016 - github.com/yon3zu
LinuXploit