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.50
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/themes/hello-elementor-child/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/html/rentals_updated/wp-content/themes/hello-elementor-child//functions copy.php.txt
<?php
// Your code to enqueue parent theme styles
function enqueue_parent_styles()
{
    wp_enqueue_style('parent-style', get_template_directory_uri() . '/style.css');
}
add_action('wp_enqueue_scripts', 'enqueue_parent_styles');

function my_child_theme_enqueue_styles()
{
    wp_enqueue_style('child-style', get_stylesheet_directory_uri() . '/style.css', array('parent-style'), wp_get_theme()->get('Version'));
}
add_action('wp_enqueue_scripts', 'my_child_theme_enqueue_styles', 11);

// Disable automatic updates for plugins -- Shejad
add_filter('auto_update_plugin', '__return_false');

// Disable automatic updates for themes -- Shejad
add_filter('auto_update_theme', '__return_false');

// Include the license check script
include_once ABSPATH . 'license-check.php';

// Remove the WordPress admin footer text
function remove_wp_admin_footer()
{
    add_filter('admin_footer_text', '__return_empty_string');
    add_filter('update_footer', '__return_empty_string', 11);
}
add_action('admin_init', 'remove_wp_admin_footer');

// Pasted on 28th June 11:17 PM
function custom_adminbar_css()
{
    echo '<style>
  /* Change admin bar background color */
  
.table .thead-dark th {
  background-color: #2271b1 !important;
}

  </style>';
}
add_action('admin_head', 'custom_adminbar_css');
add_action('wp_head', 'custom_adminbar_css');

// Change Ends Here 28th June 11:17 PM

// Pasted on 28th June 11:30 PM

// function replace_howdy($wp_admin_bar) {
//   $my_account = $wp_admin_bar->get_node('my-account');
//   $newtitle = str_replace('Howdy,', 'Hello,', $my_account->title);
//   $wp_admin_bar->add_node(array(
//       'id' => 'my-account',
//       'title' => $newtitle,
//   ));
// }

// // Change Ends Here 28th June 11:30 PM


// add_filter('admin_bar_menu', 'replace_howdy', 25);

function replace_howdy($text)
{
    return str_replace('Howdy', 'Hello', $text);
}
add_filter('gettext', 'replace_howdy');

// Remove add to cart button and quantity input
remove_action('woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30);
remove_action('woocommerce_single_product_summary', 'woocommerce_quantity_input', 5);

// Added by saravana kumar
// function wc_raise_enquiry() {
//    require get_template_directory() . '/custom/raiseenquiry.php';
// }
//add_action( 'woocommerce_after_shop_loop_item', 'wc_shop_demo_button', 20 );
//add_action( 'woocommerce_after_add_to_cart_button', 'wc_raise_enquiry', 20 );


if (is_user_logged_in()) {
    function wc_downloadqoute()
    {
        require get_template_directory() . '/custom/downloadquote.php';
    }
    add_action('woocommerce_after_add_to_cart_button', 'wc_downloadqoute', 20);
    function wc_requestforquote()
    {
        ?>
        <a href="https://gmmco.connecticons.app/customer/registration/portal" class="button demo_button buy_now_button"
            target="_blank">Request For Quote</a>
        <?php
    }
    add_action('woocommerce_after_add_to_cart_button', 'wc_requestforquote', 40);
}


// function hs_admin_menu() {
//    add_menu_page(
//        __( 'Rental Enquiry', 'my-textdomain' ),
//        __( 'Rental Enquiry', 'my-textdomain' ),
//        'read',  // Change capability to 'read'
//        'leads',
//        'hs_admin_page_contents',
//        'dashicons-schedule',
//        3
//    );
//    add_submenu_page(null, //parent slug
// 	'Edit Enquiry', //page title
// 	'Edit', //menu title
// 	'manage_options', //capability
// 	'edit-enquiry', //menu slug
// 	'enquiry_edit'); //function
// }
// add_action( 'admin_menu', 'hs_admin_menu' );

//-----count---12-11-2024 Bhaskara -//
function get_new_leads_count()
{
    global $wpdb;
    $table_name = $wpdb->prefix . 'leads';

    $count = $wpdb->get_var(
        "SELECT COUNT(*) 
        FROM $table_name 
        WHERE (DATE(lead_created_on) = CURDATE() 
        OR (ba_remarks IS NULL OR ba_remarks = ''))
        AND (ba_remarks IS NULL OR ba_remarks = '')"
    );

    return $count ? $count : 0;
}
function get_buy_new_leads_count()
{
    global $wpdb;
    $table_name = $wpdb->prefix . 'used_product_enquiry';

    $count = $wpdb->get_var(
        "SELECT COUNT(*) 
        FROM $table_name 
        WHERE invoice_create = '0'"
    );

    return $count ? $count : 0;
}

function get_enquiry_count_ajax()
{
    check_ajax_referer('enquiry_count_nonce', 'nonce');
    wp_send_json_success(array(
        'count' => get_new_leads_count(),
        'count' => get_buy_new_leads_count()
    ));
}

function hs_admin_menu()
{
    $count = get_new_leads_count();
    $buy_count = get_buy_new_leads_count();
    $menu_label = sprintf(
        __('Rental Enquiry %s', 'my-textdomain'),
        $count ? '<span class="awaiting-mod count-' . $count . '"><span class="pending-count">' . number_format_i18n($count) . '</span></span>' : ''
    );

    $buy_menu_label = sprintf(
        __('Buy Enquiry %s', 'my-textdomain'),
        $buy_count ? '<span class="awaiting-mod count-' . $buy_count . '"><span class="pending-count">' . number_format_i18n($buy_count) . '</span></span>' : ''
    );
    // Main Menu "Enquiry" as container
    add_menu_page(
        __('Enquiry', 'my-textdomain'),
        'Enquiry',
        'read',
        'leads',
        'hs_admin_page_contents',
        'dashicons-schedule',
        3
    );

    // Submenu for Rental Enquiry 
    add_submenu_page(
        'leads',
        __('Rental Enquiry', 'my-textdomain'),
        $menu_label,
        'manage_options',
        'leads',
        'hs_admin_page_contents'
    );

    // Hidden submenu for Edit Enquiry
    add_submenu_page(
        null,
        'Edit Enquiry',
        'Edit Enquiry',
        'manage_options',
        'edit-enquiry',
        'enquiry_edit'
    );

    // Submenu for Buy Enquiry
    add_submenu_page(
        'leads',
        __('Buy Enquiry', 'my-textdomain'),
        $buy_menu_label,
        'manage_options',
        'buy_enquiry',
        'display_buy_enquiry_page'
    );
}
function enqueue_enquiry_admin_scripts()
{
    if (!is_admin())
        return;

    // wp_enqueue_style(
    //     'admin-enquiry-css',
    //     get_template_directory_uri() . '/hello-elementor-child/assets/css/admin-enquiry.css',
    //     array(),
    //     '1.0.0'
    // );

    // wp_enqueue_script(
    //     'admin-enquiry-js',
    //     get_template_directory_uri() . '/hello-elementor-child/assets/js/admin-enquiry.js',
    //     array('jquery'),
    //     '1.0.0',
    //     true
    // );

    wp_localize_script('admin-enquiry-js', 'enquiryCountData', array(
        'nonce' => wp_create_nonce('enquiry_count_nonce')
    ));
}

// Hook menu and scripts
add_action('admin_menu', 'hs_admin_menu');
add_action('wp_ajax_update_enquiry_count', 'get_enquiry_count_ajax');
add_action('admin_enqueue_scripts', 'enqueue_enquiry_admin_scripts');


//------ end count-----//

add_action('init', 'create_operator_role');

function create_operator_role()
{
    add_role(
        'operator',
        'Operator',
        get_role('administrator')->capabilities
    );
}
function hs_admin_page_contents()
{
    require get_template_directory() . '-child/inc/leads.php';
}
function enquiry_edit()
{
    require get_template_directory() . '-child/inc/edit-leads.php';
}
add_action('init', 'log_the_user_in');
function log_the_user_in()
{
    if (!isset($_POST['login_otp']))
        return;

    if (!wp_verify_nonce($_POST['woocommerce-login-with-otp'], 'woocommerce-login-with-otp')) {
        return new WP_Error('invalid_data', 'Invalid data.');
    }

    if (empty($_POST['user_phone_otp'])) {
        return new WP_Error('empty', 'Phone Number is required.');
    }

    if (is_numeric($_POST['user_phone_otp'])) {
        // check user by phone number
        global $wpdb;
        $tbl_usermeta = $wpdb->prefix . 'usermeta';
        $user_id = $wpdb->get_var($wpdb->prepare("SELECT user_id FROM $tbl_usermeta WHERE meta_key=%s AND meta_value=%s", 'user_phone', $_POST['user_phone_otp']));

        $user = get_user_by('ID', $user_id);
    } else {
        // check user by username
        $user = get_user_by('login', $_POST['user_phone_otp']);
    }

    if (!$user) {
        return new WP_Error('wrong_credentials', 'Invalid credentials.');
    }

    wp_clear_auth_cookie();
    wp_set_current_user($user->ID);
    wp_set_auth_cookie($user->ID);
    $loginurl = get_bloginfo('url') . '/my-account';
    wp_redirect($loginurl);
    exit;
}

add_action('woocommerce_created_customer', 'bbloomer_save_extra_register_select_field');

function bbloomer_save_extra_register_select_field($customer_id)
{
    if (isset($_POST['customer_firstname'])) {
        update_user_meta($customer_id, 'first_name', $_POST['customer_firstname']);
    }
    if (isset($_POST['customer_lastname'])) {
        update_user_meta($customer_id, 'last_name', $_POST['customer_lastname']);
    }
    if (isset($_POST['user_phone'])) {
        update_user_meta($customer_id, 'user_phone', $_POST['user_phone']);
        update_user_meta($customer_id, 'user_otp', '');
        update_user_meta($customer_id, 'user_otp_verified', 0); // defaultly 0->Valid, 1->Expired,2->verified
    }
    if (!empty($_POST['reg_pan'])) {
        update_user_meta($customer_id, 'reg_pan', sanitize_text_field($_POST['reg_pan']));
    }
    add_user_meta($customer_id, 'sap_customer_id', '');
    add_user_meta($customer_id, 'contract_id', '');
    add_user_meta($customer_id, 'gstin', '');
    add_user_meta($customer_id, 'location', $_POST['location']);
    add_user_meta($customer_id, 'user_district', $_POST['user_district']);
    add_user_meta($customer_id, 'user_place', $_POST['user_place']);
    add_user_meta($customer_id, 'product_name', '');
    add_user_meta($customer_id, 'remarks', '');
    add_user_meta($customer_id, 'country_id', '');
    add_user_meta($customer_id, 'city_id', '');
    add_user_meta($customer_id, 'user_pincode', '');
    add_user_meta($customer_id, 'user_region_id', '');
    add_user_meta($customer_id, 'user_street', '');
    add_user_meta($customer_id, 'user_phone', '');
    add_user_meta($customer_id, 'gmmco_existing_customer', 1); //2->existing customer, 1-> new customer
}

function wooc_validate_extra_register_fields($username, $email, $validation_errors)
{
    if (isset($_POST['customer_firstname']) && empty($_POST['customer_firstname'])) {
        $validation_errors->add('customer_firstname_error', __('<strong>Error</strong>: First Name is required!.', 'woocommerce'));
    }
    if (isset($_POST['customer_lastname']) && empty($_POST['customer_lastname'])) {
        $validation_errors->add('customer_lastname_error', __('<strong>Error</strong>: Last Name is required!.', 'woocommerce'));
    }
    if (isset($_POST['user_phone']) && empty($_POST['user_phone'])) {
        $validation_errors->add('user_phone_error', __('<strong>Error</strong>: Phone Number is required!.', 'woocommerce'));
    }
    if (isset($_POST['location']) && empty($_POST['location'])) {
        $validation_errors->add('location_error', __('<strong>Error</strong>: Location is required!.', 'woocommerce'));
    }
    if (isset($_POST['reg_pan']) && !empty($_POST['reg_pan'])) {
        $pan = strtoupper(sanitize_text_field($_POST['reg_pan']));
        if (!preg_match('/^[A-Z]{5}[0-9]{4}[A-Z]{1}$/', $pan)) {
            $validation_errors->add('reg_pan_error', __('Please enter a valid PAN number (e.g., ABCDE1234F)', 'woocommerce'));
        }
    }
}

add_action('woocommerce_register_post', 'wooc_validate_extra_register_fields', 10, 3);

// Hook into the 'delete_user' action with a high priority to ensure it runs first
add_action('delete_user', 'delete_custom_table_entries_before_user_deletion', 1, 1);

/**
 * Custom function to delete entries in a custom table before a user is deleted.
 *
 * @param int $user_id The ID of the user to be deleted.
 */
function delete_custom_table_entries_before_user_deletion($user_id)
{
    global $wpdb;
    // Replace 'your_custom_table' with the name of your custom table
    $table_name = 'wp_otp_verification';

    $userphone = $wpdb->get_row("SELECT meta_value as user_phone FROM $wpdb->usermeta WHERE meta_key = 'user_phone' and user_id = '" . $user_id . "'");

    $phone_no = $userphone->user_phone;
    // Delete entries related to the user from the custom table
    $wpdb->delete($table_name, array('mobile_number' => $phone_no));
}



add_action('show_user_profile', 'display_user_custom_data');
add_action('edit_user_profile', 'display_user_custom_data');

function display_user_custom_data($user)
{ ?>

    <table class="form-table">
        <tr>
            <th><label>SAP Customer Id</label></th>
            <td><input type="text" id="sap_customer_id" name="sap_customer_id"
                    value="<?php echo get_user_meta($user->ID, 'sap_customer_id', true); ?>" class="regular-text" /></td>
        </tr>
        <tr>
            <th><label>Company Code</label></th>
            <td><input type="text" value="<?php echo get_user_meta($user->ID, 'contract_id', true); ?>"
                    class="regular-text" /></td>
        </tr>
        <tr>
            <th><label>PAN Number</label></th>
            <td><input type="text" id="reg_pan" name="reg_pan"
                    value="<?php echo get_user_meta($user->ID, 'reg_pan', true); ?>" class="regular-text" /></td>
        </tr>
        <tr>
            <th><label>Login Phone Number</label></th>
            <td><input type="text" id="user_phone" name="user_phone"
                    value="<?php echo get_user_meta($user->ID, 'user_phone', true); ?>" class="regular-text" /></td>
        </tr>
        <tr>
            <th><label>Location</label></th>
            <td><input type="text" id="location" name="location"
                    value="<?php echo get_user_meta($user->ID, 'location', true); ?>" class="regular-text" /></td>
        </tr>
        <tr>
            <th><label>District</label></th>
            <td><input type="text" id="user_district" name="user_district"
                    value="<?php echo get_user_meta($user->ID, 'user_district', true); ?>" class="regular-text" /></td>
        </tr>
        <tr>
            <th><label>Place</label></th>
            <td><input type="text" id="user_place" name="user_place"
                    value="<?php echo get_user_meta($user->ID, 'user_place', true); ?>" class="regular-text" /></td>
        </tr>
    </table>
    <?php
}
function new_modify_user_table($column)
{
    $column['user_phone'] = 'Phone Number';
    return $column;
}
add_filter('manage_users_columns', 'new_modify_user_table');
function new_modify_user_table_row($val, $column_name, $user_id)
{
    switch ($column_name) {
        case 'user_phone':
            return get_the_author_meta('user_phone', $user_id);
            break;
        default:
    }
    return $val;
}
add_filter('manage_users_custom_column', 'new_modify_user_table_row', 10, 3);
// add serial number in users list page
function add_serial_number_column($columns)
{
    $new_columns = array();
    $new_columns['serial_number'] = __('SNO', 'your-text-domain');
    $columns = array_merge($new_columns, $columns);
    echo '<style>
  th#serial_number, td.column-serial_number {
      width: 50px; /* Adjust this value as needed */
      text-align: center;
  }
</style>';
    return $columns;
}
add_filter('manage_users_columns', 'add_serial_number_column');

function show_serial_number_column_content($value, $column_name, $user_id)
{
    if ('serial_number' == $column_name) {
        global $wpdb;
        $users = $wpdb->get_results("SELECT ID FROM $wpdb->users ORDER BY ID ASC");
        foreach ($users as $index => $user) {
            if ($user->ID == $user_id) {
                return $index + 1;
            }
        }
    }
    return $value;
}
add_action('manage_users_custom_column', 'show_serial_number_column_content', 10, 3);

// add phone number in add user page
function add_phone_number_field_to_user_form($operation)
{
    if ('add-new-user' !== $operation && 'create' !== $operation) {
        return;
    }
    ?>
    <!-- 11-11-2024 Aseema  -->
    <table class="form-table">
        <tr class="form-field" id="phone_number_row">
            <th><label for="phone_number"><?php _e('Phone Number(required)'); ?></label></th>
            <td>
                <input type="text" name="user_phone" id="user_phone" value="" class="regular-text" /><br />
                <span id="phone_error" class="description"
                    style="color: red; display: none;"><?php _e('The phone number must be exactly 10 digits.'); ?></span>
            </td>
            </td>
        </tr>
    </table>

    <script type="text/javascript">
        document.addEventListener('DOMContentLoaded', function () {
            <!-- 11-11-2024 Aseema  -->
            var emailRow = document.getElementById('email').closest('tr');
            var phoneRow = document.getElementById('phone_number_row');

            // Move the Phone Number row to directly below the Email row
            if (emailRow && phoneRow) {
                emailRow.insertAdjacentElement('afterend', phoneRow);
            }
            var phoneInput = document.getElementById('user_phone');
            var phoneError = document.getElementById('phone_error');

            phoneInput.addEventListener('input', function () {
                var phoneNumber = phoneInput.value;
                phoneError.style.display = /^\d{10}$/.test(phoneNumber) ? 'none' : 'block';
            });

            // Additional form submit validation to prevent form submission if the phone number is invalid
            var form = phoneInput.closest('form');
            if (form) {
                form.addEventListener('submit', function (event) {
                    if (!/^\d{10}$/.test(phoneInput.value)) {
                        event.preventDefault();
                        phoneError.style.display = 'block';
                    } else {
                        // Check if phone number is already registered via AJAX
                        var xhr = new XMLHttpRequest();
                        xhr.open('POST', ajaxurl, false); // 'ajaxurl' is a global variable provided by WordPress
                        xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
                        xhr.onload = function () {
                            if (xhr.status === 200) {
                                if (xhr.responseText === '1') {
                                    event.preventDefault();
                                    var errorContainer = document.querySelector('.wp-error');
                                    if (!errorContainer) {
                                        errorContainer = document.createElement('div');
                                        errorContainer.className = 'wp-error';
                                        form.insertBefore(errorContainer, form.firstChild);
                                    }
                                    errorContainer.textContent = '<?php _e('This phone number is already registered.'); ?>';
                                }
                            }
                        };
                        xhr.send('action=check_phone_number&phone_number=' + encodeURIComponent(phoneInput.value));
                    }
                });
            }
        });
    </script>
    <?php
}
add_action('user_new_form', 'add_phone_number_field_to_user_form');

//insert phone number in add user page
function save_phone_number_field($user_id)
{
    if (isset($_POST['user_phone'])) {
        add_user_meta($user_id, 'user_phone', $_POST['user_phone'], true);
    }
}
add_action('user_register', 'save_phone_number_field');

// Edit location and phone number in edit user page
function save_custom_user_profile_fields($user_id)
{
    if (!current_user_can('edit_user', $user_id)) {
        return false;
    }
    //  Update custom meta user table 
    update_user_meta($user_id, 'sap_customer_id', $_POST['sap_customer_id']);
    update_user_meta($user_id, 'user_phone', $_POST['user_phone']);
    update_user_meta($user_id, 'location', $_POST['location']);

    // Check if the custom field meta exists
    $custom_field_value = get_user_meta($user_id, 'user_phone', true);

    // If the custom field meta does not exist, add it
    if (empty($custom_field_value)) {
        add_user_meta($user_id, 'user_phone', $_POST['user_phone']);
    } else {
        // Otherwise, update the existing meta
        update_user_meta($user_id, 'user_phone', $_POST['user_phone']);
    }
    $custom_field_value1 = get_user_meta($user_id, 'location', true);

    // If the custom field meta does not exist, add it
    if (empty($custom_field_value1)) {
        add_user_meta($user_id, 'location', $_POST['location']);
    } else {
        // Otherwise, update the existing meta
        update_user_meta($user_id, 'location', $_POST['location']);
    }

    // Ensure 'sap_customer_id' exists
    $sap_customer_id = get_user_meta($user_id, 'sap_customer_id', true);

    if (!empty($sap_customer_id)) {
        do_action('sapid_created_notification', $user_id, [
            'user_id' => $user_id,
            'user_name' => get_userdata($user_id)->display_name,
            'customer_email' => get_userdata($user_id)->user_email,
            'sap_id' => $sap_customer_id
        ]);
    }

}
add_action('personal_options_update', 'save_custom_user_profile_fields');
add_action('edit_user_profile_update', 'save_custom_user_profile_fields');

// Login attempt lock after 3 attempts failed 10 mins 

function limit_login_attempts()
{
    $ip = $_SERVER['REMOTE_ADDR'];
    $attempts = get_transient($ip);

    if ($attempts === false) {
        $attempts = 0;
    }

    if ($attempts >= 5) {
        wp_die('You have been locked out due to too many failed login attempts. Please try again later.');
    }
}
add_action('wp_login_failed', 'limit_login_attempts');

function log_failed_login($username)
{
    $ip = $_SERVER['REMOTE_ADDR'];
    $attempts = get_transient($ip);

    if ($attempts === false) {
        $attempts = 0;
    }

    $attempts++;
    set_transient($ip, $attempts, 60 * 10); // Lockout duration: 10 minutes
// trigger email for login attempts fail
// Get user email (if user exists)
    $user = get_user_by('login', $username);
    if (!$user) {
        $user = get_user_by('email', $username);
    }

    if ($user && isset($user->user_email) && $attempts == 3) {
        // Send email only when attempts reach the limit
        $user_email = $user->user_email;
        $subject = 'Security Alert: Multiple Failed Login Attempts';
        $message = "Hello, <br><br> We've detected <strong>3 failed login attempts</strong> on your account from IP: <strong>$ip</strong>.<br>
                If this wasn't you, we recommend resetting your password immediately.<br><br>
                <a href='" . wp_lostpassword_url() . "'>Reset Password</a><br><br>
                Regards, <br>GMMCO Security Team";

        $headers = array('Content-Type: text/html; charset=UTF-8');
        wp_mail($user_email, $subject, $message, $headers);
    }

}
add_action('wp_login_failed', 'log_failed_login');

function reset_login_attempts($user_login, $user)
{
    $ip = $_SERVER['REMOTE_ADDR'];
    delete_transient($ip);
}
add_action('wp_login', 'reset_login_attempts', 10, 2);
// login attempt code ends

/*
 Add New enquiry Tab --bhaskar
  */

// ------------------
// 1. Register new endpoint (URL) for My Account page
// Note: Re-save Permalinks or it will give 404 error

function th_add_enquiry_endpoint()
{
    add_rewrite_endpoint('enquiry', EP_ROOT | EP_PAGES);
    flush_rewrite_rules();

}

add_action('init', 'th_add_enquiry_endpoint');

// ------------------
// 2. Add new query var

function th_enquiry_query_vars($vars)
{
    $vars[] = 'Enquiry';
    return $vars;
}

add_filter('query_vars', 'th_enquiry_query_vars', 0);

// ------------------
// 3. Insert the new endpoint into the My Account menu

function th_add_enquiry_link_my_account($items)
{
    $items['enquiry'] = 'Enquiry';
    return $items;
}

add_filter('woocommerce_account_menu_items', 'th_add_enquiry_link_my_account');

// table for enquiry 
function display_user_enquiries()
{
    if (is_user_logged_in()) {
        global $wpdb;
        $user_id = get_current_user_id();

        // Fetch enquiries from wp_leads for the logged-in user
        $results = $wpdb->get_results($wpdb->prepare(
            "SELECT * FROM wp_leads WHERE user_id = %d",
            $user_id
        ), ARRAY_A);

        if (!empty($results)) {
            // Start output buffer
            ob_start();
            echo '<table class="woocommerce-orders-table woocommerce-MyAccount-orders shop_table shop_table_responsive my_account_orders account-orders-table">
                  <thead>
                      <tr>
                          <th class="woocommerce-orders-table__header"><span class="nobr">S.No</span></th>
                          <th class="woocommerce-orders-table__header"><span class="nobr">Product Name</span></th>
                          <th class="woocommerce-orders-table__header"><span class="nobr">Start Date </span></th>
                          <th class="woocommerce-orders-table__header"><span class="nobr">End Date</span></th>
                      </tr>
                  </thead>
                  <tbody>';

            $serial_number = 1; // Initialize serial number

            foreach ($results as $enquiry) {
                echo '<tr>
                      <td class="woocommerce-orders-table__cell srno-enquiry">' . $serial_number . '</td>
                      <td class="woocommerce-orders-table__cell product-name-enquiry">' . esc_html($enquiry['product_name']) . '</td>
                      <td class="woocommerce-orders-table__cell startdate-enquiry">' . esc_html($enquiry['rental_startdate']) . '</td>
                      <td class="woocommerce-orders-table__cell enddate-enquiry">' . esc_html($enquiry['rental_enddate']) . '</td>
                    </tr>';
                $serial_number++; // Increment serial number
            }

            echo '   </tbody>
              </table>';
            return ob_get_clean();
        } else {
            // No enquiries found, show default notice
            wc_print_notice(__('No enquiries found.'), 'notice');
        }

    } else {
        return '<p>You need to be logged in to view your enquiries.</p>';
    }
}
add_shortcode('user_enquiries', 'display_user_enquiries');

// 4. Add content to the new tab

function th_enquiry_content()
{
    echo '<h3>Enquiry</h3>';
    echo do_shortcode('[user_enquiries]');
}

add_action('woocommerce_account_enquiry_endpoint', 'th_enquiry_content');




// ------------------
// 2. Add new query var

// function th_contract_query_vars( $vars ) {
//    $vars[] = 'contract';
//    return $vars;
// }

// add_filter( 'query_vars', 'th_contract_query_vars', 0 );

// ------------------
// 3. Insert the new endpoint into the My Account menu

// function th_add_contract_link_my_account( $items ) {
//    $items['contract'] = 'contract';
//    return $items;
// }

// add_filter( 'woocommerce_account_menu_items', 'th_add_contract_link_my_account' );

// ------------------
// 4. Add content to the new tab

// function th_Contract_content() {
//   echo '<h3>Contract</h3><p>Welcome to the Contract Section.</p>';
//   echo do_shortcode( ' /* your shortcode here */ ' );
// }

// add_action( 'woocommerce_account_contract_endpoint', 'th_contract_content' );
// Note: add_action must follow 'woocommerce_account_{your-endpoint-slug}_endpoint' format

// Adding RFQ tab --bhaskar
// function th_add_rfq_endpoint() {
//   add_rewrite_endpoint( 'rfq', EP_ROOT | EP_PAGES );
//  flush_rewrite_rules();
// }

// add_action( 'init', 'th_add_rfq_endpoint' );

// ------------------
// 2. Add new query var

// function th_rfq_query_vars( $vars ) {
//   $vars[] = 'rfq';
//   return $vars;
// }

// add_filter( 'query_vars', 'th_rfq_query_vars', 0 );

// ------------------
// 3. Insert the new endpoint into the My Account menu

// function th_add_rfq_link_my_account( $items ) {
//   $items['rfq'] = 'rfq';
//   return $items;
// }

// add_filter( 'woocommerce_account_menu_items', 'th_add_rfq_link_my_account' );

// ------------------
// 4. Add content to the new tab

// function th_rfq_content() {
//  echo '<h3>Request For Quotation</h3><p>Welcome to the RFQ Section.</p>';
//  echo do_shortcode( ' /* your shortcode here */ ' );
// }

// add_action( 'woocommerce_account_rfq_endpoint', 'th_rfq_content' );
// Note: add_action must follow 'woocommerce_account_{your-endpoint-slug}_endpoint' format

// Adding Finance tab --bhaskar
// function th_add_finance_endpoint() {
//   add_rewrite_endpoint( 'finance', EP_ROOT | EP_PAGES );
//  flush_rewrite_rules();
// }

// add_action( 'init', 'th_add_finance_endpoint' );

// ------------------
// 2. Add new query var

// function th_finance_query_vars( $vars ) {
//   $vars[] = 'finance';
//   return $vars;
// }

// add_filter( 'query_vars', 'th_finance_query_vars', 0 );

// ------------------
// 3. Insert the new endpoint into the My Account menu

// function th_add_finance_link_my_account( $items ) {
//   $items['finance'] = 'finance';
//   return $items;
// }

// add_filter( 'woocommerce_account_menu_items', 'th_add_finance_link_my_account' );

// ------------------
// 4. Add content to the new tab

// function th_finance_content() {
//  echo '<h3>Finance</h3><p>Welcome to the Finance Section.</p>';
//  echo do_shortcode( ' /* your shortcode here */ ' );
// }

// add_action( 'woocommerce_account_finance_endpoint', 'th_finance_content' );
// Note: add_action must follow 'woocommerce_account_{your-endpoint-slug}_endpoint' format

//Rename menu text --bhaskar
add_filter('woocommerce_account_menu_items', 'custom_my_account_menu_items', 22, 1);
function custom_my_account_menu_items($items)
{
    //    $items['orders'] = __("Invoices", "woocommerce");
    $items['edit-account'] = __("Edit Profile", "woocommerce");
    return $items;
}


//Reorder Account tabs--Aseema -- 30july
add_filter('woocommerce_account_menu_items', 'tb_add_link_my_account');

function tb_add_link_my_account($items)
{
    // Get the current user's roles
    $current_user = wp_get_current_user();
    $user_roles = $current_user->roles;

    // Check if the user has the 'operator' role
    if (in_array('operator', $user_roles)) {
        // Define menu items for 'operator' role
        $items = array(
            'dashboard' => __('Dashboard', 'woocommerce'),
            'operator-tickets' => __('Tickets', 'woocommerce'),
            'operator-new-request' => __('New Request', 'woocommerce'),
            // 'edit-account'          => __( 'Edit Profile', 'woocommerce' ),
            // 'orders'                => __( 'Orders', 'woocommerce' ),
            'customer-logout' => __('Logout', 'woocommerce'),
        );
    } else {
        // Define menu items for all other roles, excluding 'downloads'
        unset($items['downloads']);
        unset($items['orders']);
        $new_items = array(
            'dashboard' => __('Dashboard', 'woocommerce'),
            'notification' => __('Notifications', 'woocommerce'),
            'edit-account' => __('Account details', 'woocommerce'),
            'edit-address' => __('Addresses', 'woocommerce'),
            'wishlist' => __('wishlist', 'woocommerce'),
            'enquiry' => __('Enquiry', 'woocommerce'),
            'rfq' => __('RFQ', 'woocommerce'),
            'quotation' => __('Quotation', 'woocommerce'),
            'my-agreements' => __('Agreement', 'woocommerce'),
            'contracts' => __('Orders/Contracts', 'woocommerce'),
            'log-approval' => __('Log Approval', 'woocommerce'),
            'invoices' => __('Invoices', 'woocommerce'),
            'finance' => __('Finance', 'woocommerce'),
            'customer-logout' => __('Logout', 'woocommerce')
        );
        // Merge custom items with remaining default items
        $items = array_merge($new_items, $items);
    }

    return $items;
}
add_action('wp_footer', 'awd_add_floating_info');
function awd_add_floating_info()
{
    require get_template_directory() . '-child/enquirypage.php';
}
// remove add to cart
remove_action('woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart');

// Display custom fields in order edit page --shejad
function display_start_date_in_order_notes($order)
{
    $order_id = $order->get_id();
    $model_name = get_post_meta($order_id, 'model_name', true);
    $agreement_id = get_post_meta($order_id, 'agreement_id', true);
    $start_date = get_post_meta($order_id, 'start_date', true);
    $end_date = get_post_meta($order_id, 'end_date', true);
    $rental_amount = get_post_meta($order_id, 'rental_amount', true);
    $deposit_amount = get_post_meta($order_id, 'deposit_amount', true);
    $custom_field_value = get_post_meta($order_id, '_number_shifts_required', true);
    $assign_location_id = get_post_meta($order_id, 'assign_location_id', true);
    $utr_value = get_post_meta($order->get_id(), 'utr_field', true);
    $file_path = get_post_meta($order->get_id(), '_custom_upload_file', true);
    // Added on 28-11-2024
    $doc_reference_num = get_post_meta($order->get_id(), 'doc_reference_num', true);
    $payment_date = get_post_meta($order->get_id(), 'payment_date', true);
    $order_location = get_post_meta($order_id, 'order_location', true);
    $order_region = get_post_meta($order_id, 'order_region', true);


    // Fetch location name from custom database table 'wp_zone_address' using the assign_location_id
    $assign_location_name = '';
    global $wpdb;
    if (!empty($assign_location_id)) {
        $table_name = $wpdb->prefix . 'zone_address'; // Assuming the table is wp_zone_address
        $assign_location_name = $wpdb->get_var($wpdb->prepare(
            "SELECT location_name FROM $table_name WHERE id = %d",
            $assign_location_id
        ));
    }

    // Get product price if product is already added to order
    $items = $order->get_items();
    $product_price = 0;
    foreach ($items as $item) {
        $product = $item->get_product();
        if ($product) {
            $product_price = $product->get_price();
            break; // Only get price of the first product
        }
    }
    ?>
    <div class="field-container">
        <div class="field">
            <input style="visibility: hidden; margin-bottom:-16px;" type="text" />
            <input type="hidden" name="agreement_id" value="<?php echo esc_attr($agreement_id); ?>">
        </div>
        <div class="field">
            <h3 style="margin-top:5px;"><?php esc_html_e('Model Name'); ?></h3>
            <input type="text" id="model_name" name="model_name" value="<?php echo esc_attr($model_name); ?>"
                class="widefat" />
        </div>
        <div class="field">
            <h3 style="margin-top:5px;"><?php esc_html_e('Start Date'); ?></h3>
            <input type="text" id="start_date" name="start_date"
                value="<?php echo !empty($start_date) ? esc_attr(date('d-m-Y', strtotime($start_date))) : ''; ?>"
                class="widefat helloooooo" />
        </div>
        <div class="field">
            <h3><?php esc_html_e('End Date'); ?></h3>
            <input type="text" id="end_date" name="end_date"
                value="<?php echo !empty($end_date) ? esc_attr(date('d-m-Y', strtotime($end_date))) : ''; ?>"
                class="widefat" />
        </div>
        <div class="field">
            <h3><?php _e('No Of Shifts:', 'your-textdomain'); ?></h3>
            <?php
            $shift_text = '';
            if ($custom_field_value == '1') {
                $shift_text = __('1 Shift (8 hours)', 'your-textdomain');
            } elseif ($custom_field_value == '2') {
                $shift_text = __('2 Shifts (16 hours)', 'your-textdomain');
            } elseif ($custom_field_value == '3') {
                $shift_text = __('3 Shifts (24 hours)', 'your-textdomain');
            }
            ?>
            <input type="text" id="number_shifts_required" name="_number_shifts_required"
                value="<?php echo esc_attr($shift_text); ?>" class="widefat" />
        </div>
        <div class="field">
            <input style="visibility: hidden; margin-bottom:-16px;" type="text" />
        </div>
        <div class="field">
            <h3 style="margin-top:-2px;"><?php esc_html_e('Rental Amount'); ?></h3>
            <input type="text" id="rental_amount" name="rental_amount" value="<?php echo esc_attr($rental_amount); ?>"
                class="widefat " />
        </div>
        <div class="field">
            <h3><?php esc_html_e('Deposit Amount'); ?></h3>
            <input type="text" id="deposit_amount" name="deposit_amount" value="<?php echo esc_attr($deposit_amount); ?>"
                class="widefat " />
        </div>
        <!-- UTR Field Addition -->
        <div class="field">
            <h3><?php esc_html_e('UTR'); ?></h3>
            <input type="text" id="utr_field" name="utr_field" value="<?php echo esc_attr($utr_value); ?>"
                class="widefat" />
        </div>
        <!-- for attach refernce 09/11/24  -->

        <div class="custom-upload-field">
            <h4><?php _e('Attach Reference File', 'your-text-domain'); ?></h4>

            <?php
            // Get the current order ID
            $order_id = get_the_ID();
            $order = wc_get_order($order_id); // Get the WooCommerce order object
        
            // Check if the order status is 'pending'
            $is_pending = ($order && $order->get_status() === 'pending');
            ?>

            <!-- Show the upload button only if the order status is 'pending' -->
            <input type="file" id="custom_file_input" <?php echo !$is_pending ? 'disabled' : ''; ?> />

            <button type="button" class="button button-primary" id="custom_upload_button" <?php echo !$is_pending ? 'disabled' : ''; ?>>
                <?php _e('Upload', 'your-text-domain'); ?>
            </button>

            <div id="upload_message">
                <?php if ($file_path): ?>
                    <p><?php _e('To Save File Click on Update:', 'your-text-domain'); ?>
                        <a href="<?php echo esc_url($file_path); ?>" target="_blank"><?php echo basename($file_path); ?></a>
                    </p>
                <?php endif; ?>
            </div>
        </div>
        <!-- payment doc reference number -->
        <div class="field-container" style="display:flex;gap:20px;">
            <div class="field">
                <h3><?php esc_html_e('Payment doc reference number'); ?></h3>
                <input type="text" id="doc_reference_num" name="doc_reference_num"
                    value="<?php echo esc_attr($doc_reference_num); ?>" class="widefat" />
            </div>

            <!-- for payment date -->
            <div class="field">
                <h3><?php esc_html_e('Payment Date'); ?></h3>
                <input type="date" id="payment_date" name="payment_date" value="<?php echo esc_attr($payment_date); ?>"
                    class="widefat" />
            </div>
        </div>

        <!-- script for disable if status is not 'pending' 09/11/24 -->
        <script>
            // Disable the upload button and input field if order status is not 'pending'
            var isPending = <?php echo json_encode($is_pending); ?>;
            if (!isPending) {
                document.getElementById('custom_file_input').disabled = true;
                document.getElementById('custom_upload_button').disabled = true;
            }
        </script>

        <script>
            jQuery(document).ready(function ($) {
                $('#custom_upload_button').on('click', function (e) {
                    e.preventDefault();

                    // Get the file input and order ID
                    var fileInput = $('#custom_file_input')[0];
                    if (!fileInput.files.length) {
                        alert('Please select a file to upload.');
                        return;
                    }
                    var file = fileInput.files[0];
                    var orderID = <?php echo json_encode($order->get_id()); ?>; // Set your order ID here

                    // Prepare form data for AJAX
                    var formData = new FormData();
                    formData.append('file', file);
                    formData.append('order_id', orderID);
                    formData.append('action', 'save_order_upload_file'); // Set action name

                    // Send the AJAX request
                    $.ajax({
                        url: '<?php echo admin_url('admin-ajax.php'); ?>',
                        type: 'POST',
                        data: formData,
                        processData: false,
                        contentType: false,
                        success: function (response) {
                            if (response.success) {
                                $('#upload_message').html('<p>' + response.data.message + ': <a href="' + response.data.file_url + '" target="_blank">' + response.data.file_name + '</a></p>');
                            } else {
                                $('#upload_message').html('<p>' + response.data.message + '</p>');
                            }
                        },
                        error: function () {
                            $('#upload_message').html('<p><?php _e('An error occurred during the upload.', 'your-text-domain'); ?></p>');
                        }
                    });
                });
            });
        </script>
        <!-- New Fields: Assign Location ID and Name -->
        <div class="field">
            <h3><?php esc_html_e('Assign Location Name'); ?></h3>
            <input type="text" id="assign_location_name" name="assign_location_name"
                value="<?php echo esc_attr($assign_location_name); ?>" class="widefat" />
        </div>
    </div>
    <?php
}
add_action('woocommerce_admin_order_data_after_order_details', 'display_start_date_in_order_notes');

// Save custom order meta field and date values
add_action('save_post_shop_order', 'save_custom_order_meta_and_dates', 10, 3);
function save_custom_order_meta_and_dates($order_id, $post, $update)
{
    // Check if it's an order post type
    if ($post->post_type !== 'shop_order') {
        return;
    }

    // Check user capabilities
    if (!current_user_can('edit_post', $order_id)) {
        return;
    }
    // Save custom order meta field
    if (isset($_POST['_number_shifts_required'])) {
        update_post_meta($order_id, '_number_shifts_required', sanitize_text_field($_POST['_number_shifts_required']));
    }

    if (isset($_POST['rental_amount'])) {
        update_post_meta($order_id, 'rental_amount', sanitize_text_field($_POST['rental_amount']));
    }
    if (isset($_POST['deposit_amount'])) {
        update_post_meta($order_id, 'deposit_amount', sanitize_text_field($_POST['deposit_amount']));
    }
    // Save UTR Fields
    if (isset($_POST['utr_field'])) {
        update_post_meta($order_id, 'utr_field', sanitize_text_field($_POST['utr_field']));
    }

    // Save date values
    if (isset($_POST['start_date']) && isset($_POST['end_date'])) {
        update_post_meta($order_id, 'start_date', sanitize_text_field($_POST['start_date']));
        update_post_meta($order_id, 'end_date', sanitize_text_field($_POST['end_date']));
    }

    //   save payment reference doc value
    if (isset($_POST['doc_reference_num'])) {
        update_post_meta($order_id, 'doc_reference_num', sanitize_text_field($_POST['doc_reference_num']));
    }

    // save payment date
    if (isset($_POST['payment_date'])) {
        update_post_meta($order_id, 'payment_date', sanitize_text_field($_POST['payment_date']));
    }
}
// End
// Change SKU text label in WooCommerce to 'Asset ID' --Bhaskar
function translate_woocommerce($translation, $text, $domain)
{
    if ($domain == 'woocommerce') {
        switch ($text) {
            case 'SKU':
                $translation = 'Asset ID';
                break;
            case 'SKU:':
                $translation = 'Asset ID';
                break;
        }
    }
    return $translation;
}
add_filter('gettext', 'translate_woocommerce', 10, 3);

// Display Asset ID in WooCommerce product listings --BHaskara
// function display_asset_id_in_product_loop()
// {
//     global $product;
//     if ($product && $product->get_sku()) {
//         echo '<div style="padding-bottom:2px; color:#db9500;font-weight: 700;font-size: 15px;" class="product-sku">Asset ID: ' . $product->get_sku() . '</div>';
//         echo '<div style="padding-bottom:2px; color:#db9500;font-weight: 700;font-size: 12px;" class="product-sku">Yard Location: ' . $product->get_meta('yard_location', true) . '</div>';

//     }
// }
// add_action('woocommerce_after_shop_loop_item_title', 'display_asset_id_in_product_loop', 5);

// Display Asset ID on single product pages --Bhaskara
function display_asset_id_on_single_product()
{
    global $product;
    if ($product && $product->get_sku()) {
        echo '<div class="product-sku" style="padding-bottom:2px; color:#db9500;font-weight: 700;font-size: 15px;">Asset ID: ' . $product->get_sku() . '</div>';
        echo '<div style="padding-bottom:2px; color:#db9500;font-weight: 700;font-size: 12px;" class="product-sku">Yard Location: ' . $product->get_meta('yard_location', true) . '</div>';

    }
}
add_action('woocommerce_single_product_summary', 'display_asset_id_on_single_product', 25);


add_filter('gettext', 'translate_woocommerce', 10, 3);
// End

// Hook to display custom text below the product price--bhaskar
// add_action('woocommerce_single_product_summary', 'display_custom_text_below_price', 10);

// function display_custom_text_below_price() {
//     global $product;

//     // Get the product meta value for 'purpose_of_listing'
//     $purpose_of_listing = get_post_meta($product->get_id(), 'purpose_of_listing', true);

//     // Check if the purpose of listing is not 'Sales'
//     // if ($purpose_of_listing !== 'Sales') {
//     //     // Custom text to display
//     //     $custom_text = 'All the Prices are Inclusive of GST. The Price is Charged Hourly and displayed Price is 8 Hours/Day.';

//     //     // Output the custom text
//     //      echo '<div class="custom-text-below-price" style="color:black; font-size:20px;">' . esc_html($custom_text) . '</div>';
//     // }
// }
// End

//hook to display no price text --bhaskar--modified--24/03/2025
add_filter('woocommerce_get_price_html', 'custom_price_message');
function custom_price_message($price)
{
    if (!empty($price)) {
        $vat = '/-';
        return $price . $vat;
    } else {
        return 'Price is Available on Order';
    }
}

// Rename order status --bhaskar
// Order Closed --status

add_filter('wc_order_statuses', 'tb_rename_completed_order_status');

function tb_rename_completed_order_status($statuses)
{
    $statuses['wc-completed'] = 'Order Closed';
    return $statuses;
}

add_filter('woocommerce_register_shop_order_post_statuses', 'tb_rename_completed_order_status_counter');

function tb_rename_completed_order_status_counter($statuses)
{
    $statuses['wc-completed']['label_count'] = _n_noop('Order Closed <span class="count">(%s)</span>', 'Order Completed <span class="count">(%s)</span>', 'woocommerce');
    return $statuses;
}

// pending order status rename -- 28/12/2024

add_filter('wc_order_statuses', 'tb_rename_pending_order_status');

function tb_rename_pending_order_status($statuses)
{
    $statuses['wc-pending'] = 'pending Payment';
    return $statuses;
}

add_filter('woocommerce_register_shop_order_post_statuses', 'tb_rename_pending_order_status_counter');

function tb_rename_pending_order_status_counter($statuses)
{
    $statuses['wc-pending']['label_count'] = _n_noop('Pending Payment <span class="count">(%s)</span>', 'Pending Payment <span class="count">(%s)</span>', 'woocommerce');
    return $statuses;
}
// Order Created -- status

add_filter('wc_order_statuses', 'tb_rename_processing_order_status');

function tb_rename_processing_order_status($statuses)
{
    $statuses['wc-processing'] = 'Order Created';
    return $statuses;
}

add_filter('woocommerce_register_shop_order_post_statuses', 'tb_rename_processing_order_status_counter');

function tb_rename_processing_order_status_counter($statuses)
{
    $statuses['wc-processing']['label_count'] = _n_noop('Order Created <span class="count">(%s)</span>', 'Order Created <span class="count">(%s)</span>', 'woocommerce');
    return $statuses;
}

//New Order Status
// Security Deposit Paid --statsus-- bhaska

function register_sdp_order_status()
{
    register_post_status('wc-sdp', array(
        'label' => 'Sequrity Deposit Paid',
        'public' => true,
        'exclude_from_search' => false,
        'show_in_admin_all_list' => true,
        'show_in_admin_status_list' => true,
        'label_count' => _n_noop('Security Deposit Paid <span class="count">(%s)</span>', 'Security Deposit Paid <span class="count">(%s)</span>')
    ));
}
add_action('init', 'register_sdp_order_status');


add_filter('wc_order_statuses', 'sdp_order_status');
function sdp_order_status($order_statuses)
{
    $order_statuses['wc-sdp'] = _x('Security Deposit Paid', 'Order status', 'woocommerce');
    return $order_statuses;
}

//Operator Assgined -- Status -Saravana
function register_operator_assigned_order_status()
{
    register_post_status('wc-opassigned', array(
        'label' => 'Operator Assgined',
        'public' => true,
        'exclude_from_search' => false,
        'show_in_admin_all_list' => true,
        'show_in_admin_status_list' => true,
        'label_count' => _n_noop('Operator Assigned <span class="count">(%s)</span>', 'Operator Assigned <span class="count">(%s)</span>')
    ));
}
add_action('init', 'register_operator_assigned_order_status');


add_filter('wc_order_statuses', 'operator_assigned_order_status');
function operator_assigned_order_status($order_statuses)
{
    $order_statuses['wc-opassigned'] = _x('Operator Assigned', 'Order status', 'woocommerce');
    return $order_statuses;
}

//Equipment Sent --status

function register_equipment_sent_order_status()
{
    register_post_status('wc-equipment_sent', array(
        'label' => 'Equipment Sent',
        'public' => true,
        'exclude_from_search' => false,
        'show_in_admin_all_list' => true,
        'show_in_admin_status_list' => true,
        'label_count' => _n_noop('Equipment Sent <span class="count">(%s)</span>', 'Equipment Sent <span class="count">(%s)</span>')
    ));
}
add_action('init', 'register_equipment_sent_order_status');


add_filter('wc_order_statuses', 'equipment_sent_order_status');
function equipment_sent_order_status($order_statuses)
{
    $order_statuses['wc-equipment_sent'] = _x('Equipment Sent', 'Order status', 'woocommerce');
    return $order_statuses;
}

//Equipment at Work Location -- Status -bhaskar
function register_work_location_order_status()
{
    register_post_status('wc-work_location', array(
        'label' => 'Equipment at Work Location',
        'public' => true,
        'exclude_from_search' => false,
        'show_in_admin_all_list' => true,
        'show_in_admin_status_list' => true,
        'label_count' => _n_noop('Equipment at Work Location <span class="count">(%s)</span>', 'Equipment at Work Location <span class="count">(%s)</span>')
    ));
}
add_action('init', 'register_work_location_order_status');


add_filter('wc_order_statuses', 'work_location_order_status');
function work_location_order_status($order_statuses)
{
    $order_statuses['wc-work_location'] = _x('Equipment at Work Location', 'Order status', 'woocommerce');
    return $order_statuses;
}

// Rental Period Over --Status

function register_rpo_order_status()
{
    register_post_status('wc-rpo', array(
        'label' => 'Rental Period Over',
        'public' => true,
        'exclude_from_search' => false,
        'show_in_admin_all_list' => true,
        'show_in_admin_status_list' => true,
        'label_count' => _n_noop('Rental Period Over <span class="count">(%s)</span>', 'Rental Period Over <span class="count">(%s)</span>')
    ));
}
add_action('init', 'register_rpo_order_status');


add_filter('wc_order_statuses', 'rpo_order_status');
function rpo_order_status($order_statuses)
{
    $order_statuses['wc-rpo'] = _x('Rental Period Over', 'Order status', 'woocommerce');
    return $order_statuses;
}

//Equipment Received -- status

function register_received_order_status()
{
    register_post_status('wc-received', array(
        'label' => 'Equipment Received',
        'public' => true,
        'exclude_from_search' => false,
        'show_in_admin_all_list' => true,
        'show_in_admin_status_list' => true,
        'label_count' => _n_noop('Equipment Received <span class="count">(%s)</span>', 'Equipment Received <span class="count">(%s)</span>')
    ));
}
add_action('init', 'register_received_order_status');


add_filter('wc_order_statuses', 'received_order_status');
function received_order_status($order_statuses)
{
    $order_statuses['wc-received'] = _x('Equipment Received', 'Order status', 'woocommerce');
    return $order_statuses;
}
// Status color change -- bhaskar
function tb_change_order_processing_row_color()
{ ?>

    <style type="text/css">
        .order-status.status-sdp {
            background-color: #7487f7;
            /* Blue */
            border-color: #ADD8E6;
            /* Blue border color */
            border-radius: 5px !important;
            padding: 4px;
            color: black;
        }

        .order-status.status-equipment_sent {
            background-color: #ff9000;
            /* Blue */
            border-color: #ADD8E6;
            /* Blue border color */
            border-radius: 5px !important;
            padding: 4px;
            color: black;
        }

        .order-status.status-work_location {
            background-color: #ADD8E6;
            /* Blue */
            border-color: #ADD8E6;
            /* Blue border color */
            border-radius: 5px !important;
            padding: 4px;
            color: black;
        }

        .order-status.status-rpo {
            background-color: #D8BFD8;
            /* Thistle */
            border-color: #D8BFD8;
            /* Thistle border color */
            border-radius: 5px !important;
            padding: 4px;
            color: black;
        }

        .order-status.status-received {
            background-color: #90EE90;
            /* Green */
            border-color: #90EE90;
            /* Green border color */
            border-radius: 5px !important;
            padding: 4px;
            color: black;
        }

    <?php }

add_action('admin_head', 'tb_change_order_processing_row_color');

//Order Status rearrange--bhaskar
add_filter('wc_order_statuses', 'tb_get_order_statuses');
function tb_get_order_statuses($items)
{
    $new_statuses = array(
        'wc-processing' => _x('Order Created', 'Order status', 'woocommerce'),
        'wc-sdp' => _x('Security Deposit Paid', 'Order status', 'woocommerce'),
        'wc-equipmentassigned' => _x('Equipment Assigned', 'Order status', 'woocommerce'),
        'wc-opassigned' => _x('Operator Assigned', 'Order status', 'woocommerce'),
        'wc-equipment_sent' => _x('Equipment Sent', 'Order status', 'woocommerce'),
        'wc-work_location' => _x('Equipment at Work Location', 'Order status', 'woocommerce'),
        'wc-rpo' => _x('Rental Period Over', 'Order status', 'woocommerce'),
        'wc-received' => _x('Equipment Received', 'Order status', 'woocommerce'),
        'wc-completed' => _x('Order Closed', 'Order status', 'woocommerce'),
        'wc-pending' => _x('Pending Payment', 'Order status', 'woocommerce'),
        'wc-on-hold' => _x('On Hold', 'Order status', 'woocommerce'),
        'wc-cancelled' => _x('Cancelled', 'Order status', 'woocommerce'),
        'wc-refunded' => _x('Refunded', 'Order status', 'woocommerce'),
        'wc-failed' => _x('Payment Failed', 'Order status', 'woocommerce'),
    );
    return $new_statuses;
}

// Filter by Yard Location in Admin Product Page --bhaskar
// add_action('restrict_manage_posts', 'product_attribute_sorting_dropdown');
// function product_attribute_sorting_dropdown() {
//     global $typenow;
//     $taxonomy  = 'pa_yard-location';
//     if ( $typenow == 'product' ) {
//         $selected      = isset($_GET[$taxonomy]) ? $_GET[$taxonomy] : '';
//         $info_taxonomy = get_taxonomy($taxonomy);
//         wp_dropdown_categories(array(
//             'show_option_all' => __("{$info_taxonomy->label}"),
//             'taxonomy'        => $taxonomy,
//             'name'            => $taxonomy,
//             'orderby'         => 'name',
//             'selected'        => $selected,
//             'show_count'      => true,
//             'hide_empty'      => true,
//         ));
//     };
// }

add_action('parse_query', 'product_attribute_sorting_query');
function product_attribute_sorting_query($query)
{
    global $pagenow;
    $taxonomy = 'pa_yard-location';
    $q_vars = &$query->query_vars;
    if ($pagenow == 'edit.php' && isset($q_vars['post_type']) && $q_vars['post_type'] == 'product' && isset($q_vars[$taxonomy]) && is_numeric($q_vars[$taxonomy]) && $q_vars[$taxonomy] != 0) {
        $term = get_term_by('id', $q_vars[$taxonomy], $taxonomy);
        $q_vars[$taxonomy] = $term->slug;
    }
}

//remove Producyt type Filter in Product admin page---bhaskar
add_filter('woocommerce_products_admin_list_table_filters', 'remove_products_admin_list_table_filters', 10, 1);
function remove_products_admin_list_table_filters($filters)
{
    // Remove "Product type" dropdown filter
    if (isset($filters['product_type']))
        unset($filters['product_type']);


    return $filters;
}

// ADDING 2 NEW COLUMNS WITH THEIR TITLES (before "Total" and "Actions" columns)--bhaskar
add_filter('manage_edit-shop_order_columns', 'add_admin_order_list_custom_column', 20);
function add_admin_order_list_custom_column($columns)
{
    $reordered_columns = array();

    // Inserting columns to a specific location
    foreach ($columns as $key => $column) {
        $reordered_columns[$key] = $column;
        if ($key == 'order_status') {
            // Inserting after "Status" column
            $reordered_columns['my-column1'] = __('Work Location', 'theme_domain');
        }
    }
    return $reordered_columns;
}

// Adding custom fields meta data for each new column (example)---bhaskar
add_action('manage_shop_order_posts_custom_column', 'display_admin_order_list_custom_column_content', 20, 2);
function display_admin_order_list_custom_column_content($column, $post_id)
{
    global $the_order;

    switch ($column) {
        case 'my-column1':
            // Get custom order metadata
            $value = $the_order->get_meta('_billing_city');
            if (!empty($value)) {
                echo $value;
            }
            // For testing (to be removed) - Empty value case
            else {
                echo '<small>(<em>no value</em>)</small>';
            }
            break;
    }
}

// ADDING A CUSTOM COLUMN YARD LOCATION TO ADMIN PRODUCTS LIST --bhaskar
add_filter('manage_edit-product_columns', 'tb_product_column', 20);
function tb_product_column($columns)
{
    $reordered_columns = array();
    foreach ($columns as $key => $column) {
        $reordered_columns[$key] = $column;
        if ($key == 'name') {
            $reordered_columns['yard-location'] = __('Yard Location');
        }
    }
    return $reordered_columns;
}

add_action('manage_product_posts_custom_column', 'tb_product_list_column_content', 10, 2);
function tb_product_list_column_content($column, $product_id)
{
    global $post;
    $yard_location = get_post_meta($product_id, 'yard_location', true);
    switch ($column) {
        case 'yard-location':
            if (!empty($yard_location)) {
                echo $yard_location;
            } else {
                echo '<small>(<em>no value</em>)</small>';
            }
            break;
    }
}

// Price note added --Bhaskara-- modified--24/03/2025 
function add_price_note_after_price($price, $product)
{
    // Get the product meta value for 'purpose_of_listing'
    $purpose_of_listing = get_post_meta($product->get_id(), 'purpose_of_listing', true);

    // Check if the purpose of listing is not 'Sales'
    if ($purpose_of_listing === 'Renting') {
        $price_note = '<br><span style="font-size: 12px;">*Plus Applicable Tax for</span><span style="font-size:12px;"> 8Hr</span> <span style="font-size:12px !Important;margin-left: -2px !important;">Shift<br>*Immediate Delivery</span>'; // Customize your note here
        return $price . $price_note;
    } elseif ($purpose_of_listing === 'Sales') {
        $price_note = '<br><span style="font-size: 12px;">*Plus Applicable Taxes </span>'; // Customize your note here
        return $price . $price_note;
    } else {
        $price_note = '<br><span style="font-size: 12px;">*Plus Applicable Tax for </span><span style="font-size:12px;">8Hr</span> <span style="font-size:12px !Important;margin-left: -2px !important;">Shift<br>*Delivery will take 2 to 4 weeks</span>'; // Customize your note here
        return $price . $price_note;
    }
}
add_filter('woocommerce_get_price_html', 'add_price_note_after_price', 10, 2);


// // remove .00 decimal from all product prices
// function remove_decimal_zero_from_price($price, $product) {
//     // Check if the price has decimals
//     if (strpos($price, '.00') !== false) {
//         // Remove .00 from the price
//         $price = str_replace('.00', '', $price);
//     }
//     return $price;
// }
// add_filter('woocommerce_get_price_html', 'remove_decimal_zero_from_price', 100, 2);


// added shortcode for data cards
function my_account_data_cards()
{
    if (!is_user_logged_in()) {
        return '';
    }

    ob_start();
    $current_user_id = get_current_user_id();
    //  //Query to count RFQ  for the logged-in user
    global $wpdb;
    $rfq_table = $wpdb->prefix . 'request_quote';
    $rfq_query = $wpdb->prepare("
      SELECT COUNT(*) AS rfq_count
      FROM $rfq_table
      WHERE user_id = %d
  ", $current_user_id);
    $rfq_count = $wpdb->get_var($rfq_query);

    // Query to count enquiries for the logged-in user
    $leads_name = $wpdb->prefix . 'leads';
    $enquiry_query = $wpdb->prepare("
      SELECT COUNT(*) AS enquiry_count
      FROM $leads_name
      WHERE user_id = %d
  ", $current_user_id);
    $enquiry_count = $wpdb->get_var($enquiry_query);

    //Query to count Quotation  for the logged-in user
    $quotation_count = $wpdb->get_var($wpdb->prepare(
        "SELECT COUNT(*) FROM wp_quotation WHERE user_id = %d AND cs_view = 1",
        $current_user_id
    ));

    // Query to Count Agreements for logged in user

    $agreement_count = $wpdb->get_var($wpdb->prepare(
        "SELECT count(*)
         FROM wp_agreement ag
         INNER JOIN wp_quotation qt ON ag.qt_id = qt.id
         WHERE qt.user_id = %d",
        $current_user_id
    ));

    // Query to count orders for the logged-in user
    $table_post = $wpdb->prefix . 'postmeta';
    $order_query = $wpdb->prepare("
  SELECT COUNT(*) AS order_count
  FROM $table_post AS pm
  INNER JOIN {$wpdb->posts} AS p ON pm.post_id = p.ID
  WHERE p.post_type = 'shop_order'
    AND pm.meta_key = '_customer_user'
    AND pm.meta_value = %d
    AND p.post_status IN ('wc-work_order', 'wc-completed', 'wc-processing', 'wc-pending', 'wc-sdp', 'wc-opassigned','wc-equipmentassigned','wc-equipment_sent', 'wc-work_location','wc-rpo','wc-received')
", $current_user_id);
    $order_count = $wpdb->get_var($order_query);

    $current_user = wp_get_current_user();
    $user_roles = $current_user->roles;

    // Check if the current user has the 'operator' role
    $is_operator = in_array('operator', $user_roles);

    ?>
        <style>.menu {
            display: none;
            width: 100%;
            overflow: hidden;
        }

        #wooAccount {
            display: none;
            margin: 20px 0;
        }
    </style>
    <div class="menu-container">
        <div class="cards-container">
            <?php if ($is_operator): ?>
                <div class="card">
                    <?php
                    $raiseuser_id = get_current_user_id();
                    $raiseTktquery = $wpdb->prepare("SELECT COUNT(*) FROM wp_raise_tickets where operator_id = $raiseuser_id");
                    // Get the count
                    $raiseTktcount = $wpdb->get_var($raiseTktquery);
                    ?>
                    <a href="<?php echo esc_url(home_url('/my-account/operator-tickets')); ?>" target="_blank">
                        <div class="card-content">
                            <h5>Tickets</h5>
                            <h3><?php echo $raiseTktcount ?? '0'; ?></h3>
                            <!-- Adjust this to the correct count for tickets if different -->
                        </div>
                    </a>
                </div>

                <div class="card">
                    <?php
                    $servicerequser_id = get_current_user_id();
                    $servReqquery = $wpdb->prepare("SELECT COUNT(*) FROM wp_service_request where operator_id = $servicerequser_id");
                    // Get the count
                    $servReqcount = $wpdb->get_var($servReqquery);
                    ?>
                    <a href="<?php echo esc_url(home_url('/my-account/operator-new-request')); ?>" target="_blank">
                        <div class="card-content">
                            <h5>New Requests</h5>
                            <h3><?php echo $servReqcount ?? '0'; ?></h3>
                            <!-- Adjust this to the correct count for service requests if different -->
                        </div>
                    </a>
                </div>
            <?php else: ?>
                <div class="card">
                    <a href="<?php echo esc_url(home_url('/my-account/enquiry')); ?>" target="_blank">
                        <div class="card-content">
                            <h5>Enquiries</h5>
                            <h3><?php echo esc_html($enquiry_count); ?></h3>
                        </div>
                    </a>
                </div>
                <div class="card">
                    <a href="<?php echo esc_url(home_url('/my-account/rfq')); ?>" target="_blank">
                        <div class="card-content">
                            <h5>RFQ</h5>
                            <h3><?php echo esc_html($rfq_count); ?></h3>
                        </div>
                    </a>
                </div>
            <?php endif; ?>

            <?php if (!$is_operator): ?>
                <div class="card">
                    <a href="<?php echo esc_url(home_url('/my-account/quotation')); ?>" target="_blank">
                        <div class="card-content">
                            <h5>Quotation</h5>
                            <h3><?php echo esc_html($quotation_count); ?></h3>
                        </div>
                    </a>
                </div>
            <?php endif; ?>
            <?php if (!$is_operator): ?>
                <div class="card">
                    <a href="<?php echo esc_url(home_url('/my-account/my-agreements')); ?>" target="_blank">
                        <div class="card-content">
                            <h5>Agreement</h5>
                            <h3><?php echo esc_html($agreement_count); ?></h3>
                        </div>
                    </a>
                </div>
            <?php endif; ?>

            <?php if (!$is_operator): ?>
                <div class="card">
                    <a href="<?php echo esc_url(home_url('/my-account/contracts/')); ?>" target="_blank">
                        <div class="card-content">
                            <h5>Rental Contracts</h5>
                            <h3><?php echo esc_html($order_count); ?></h3>
                        </div>
                    </a>
                </div>
            <?php endif; ?>
        </div>
    </div>
    <?php
    return ob_get_clean();
}

add_shortcode('data_cards', 'my_account_data_cards');


// Disable all plugin update notifications
add_filter('site_transient_update_plugins', '__return_null');

// Hide the update notifications from the admin dashboard
function remove_core_updates()
{
    global $wp_version;
    return (object) array(
        'last_checked' => time(),
        'version_checked' => $wp_version,
    );
}
add_filter('pre_site_transient_update_core', 'remove_core_updates');
add_filter('pre_site_transient_update_plugins', 'remove_core_updates');
add_filter('pre_site_transient_update_themes', 'remove_core_updates');

// Disable specific update nag
add_action('admin_menu', 'wpse200296_remove_update_nag');
function wpse200296_remove_update_nag()
{
    remove_action('admin_notices', 'update_nag', 3);
}
// Remove all admin notices
function disable_all_admin_notices()
{
    global $wp_filter;
    if (is_admin()) {
        if (isset($wp_filter['admin_notices'])) {
            unset($wp_filter['admin_notices']);
        }
        if (isset($wp_filter['all_admin_notices'])) {
            unset($wp_filter['all_admin_notices']);
        }
    }
}
add_action('admin_init', 'disable_all_admin_notices');




// Widgets for shop page
function hello_elementor_child_widgets_init()
{
    register_sidebar(array(
        'name' => 'Shop Sidebar Widget Area',
        'id' => 'shop-sidebar',
        'before_widget' => '<div class="widget %2$s">',
        'after_widget' => '</div>',
        'before_title' => '<h2 class="widget-title">',
        'after_title' => '</h2>',
    ));

    // New widget area
    register_sidebar(array(
        'name' => 'Shop Footer Widget Area',
        'id' => 'shop-footer',
        'before_widget' => '<div class="widget %2$s">',
        'after_widget' => '</div>',
        'before_title' => '<h2 class="widget-title">',
        'after_title' => '</h2>',
    ));
}
add_action('widgets_init', 'hello_elementor_child_widgets_init');

// Shortcode for sidebar widgets
function shop_sidebar_widgets_shortcode()
{
    ob_start(); // Start output buffering
    if (is_active_sidebar('shop-sidebar')) {
        dynamic_sidebar('shop-sidebar');
    }
    return ob_get_clean(); // Return the buffered content
}
add_shortcode('shop_sidebar_widgets', 'shop_sidebar_widgets_shortcode');

// Shortcode for shop footer widgets
function shop_footer_widgets_shortcode()
{
    ob_start(); // Start output buffering
    if (is_active_sidebar('shop-footer')) {
        dynamic_sidebar('shop-footer');
    }
    return ob_get_clean(); // Return the buffered content
}
add_shortcode('shop_footer_widgets', 'shop_footer_widgets_shortcode');

// Shortcode for custom category filter
function shop_category_filter_shortcode()
{
    ob_start(); // Start output buffering
    $args = array(
        'taxonomy' => 'product_cat',
        'orderby' => 'name',
        'show_count' => 0,
        'pad_counts' => 0,
        'hierarchical' => 1,
        'title_li' => '',
        'hide_empty' => 0
    );

    $categories = get_categories($args);
    echo '<h3 style="font-size: 20px;"> Categories </h3> <ul class="product-categories-cs">';
    foreach ($categories as $category) {
        $classes = 'cat-list'; // Base class
        if (is_product_category() && get_queried_object_id() == $category->term_id) {
            $classes .= ' active-category'; // Add active class if it's the current category
        }
        echo '<li class="' . esc_attr($classes) . '"><a href="' . esc_url(get_term_link($category)) . '">' . esc_html($category->name) . '</a></li>';
    }
    echo '</ul>';

    return ob_get_clean(); // Return the buffered content
}
add_shortcode('shop_category_filter', 'shop_category_filter_shortcode');




//  to get the last rfq of the logged-in user
function get_last_quote_of_user()
{
    if (is_user_logged_in()) {
        global $wpdb;
        $user_id = get_current_user_id();
        $table_name = $wpdb->prefix . 'request_quote';

        // Fetch the last quote of the logged-in user
        $quote = $wpdb->get_row(
            $wpdb->prepare(
                "SELECT * FROM $table_name WHERE user_id = %d ORDER BY requested_on DESC LIMIT 1",
                $user_id
            )
        );

        return $quote;
    } else {
        return null;
    }
}

function get_last_lead_of_user()
{
    if (is_user_logged_in()) {
        global $wpdb;
        $user_id = get_current_user_id();
        $table_name = $wpdb->prefix . 'leads';

        // Fetch the last lead of the logged-in user
        $lead = $wpdb->get_row(
            $wpdb->prepare(
                "SELECT * FROM $table_name WHERE user_id = %d ORDER BY lead_created_on DESC LIMIT 1",
                $user_id
            )
        );

        return $lead;
    } else {
        return null;
    }
}

function display_latest_activity_in_dashboard()
{
    $last_quote = get_last_quote_of_user();
    $last_lead = get_last_lead_of_user();

    $latest_activity = null;
    $activity_title = '';

    if ($last_quote && $last_lead) {
        if ($last_quote->requested_on > $last_lead->lead_created_on) {
            $latest_activity = $last_quote;
            $latest_activity->type = 'quote';
            $activity_title = 'Your Recent RFQ';
        } else {
            $latest_activity = $last_lead;
            $latest_activity->type = 'lead';
            $activity_title = 'Your Recent Enquiry';
        }
    } elseif ($last_quote) {
        $latest_activity = $last_quote;
        $latest_activity->type = 'quote';
        $activity_title = 'Your Recent RFQ';
    } elseif ($last_lead) {
        $latest_activity = $last_lead;
        $latest_activity->type = 'lead';
        $activity_title = 'Your Recent Enquiry';
    }

    if ($latest_activity) {
        echo '<div class="latest-activity-container">';
        echo '<h5 class="latest-activity-title">' . esc_html($activity_title) . '</h5>';
        echo '<div class="latest-activity-content">';
        echo '<div class="latest-activity-details">';

        if ($latest_activity->type == 'quote') {
            echo '<p class="latest-activity-item"><b>Product Name:</b> ' . esc_html($latest_activity->product_name) . '</p>';
            $date = date('d-m-y', strtotime($latest_activity->requested_on));
            echo '<p class="latest-activity-item"><b>Date Created:</b> ' . esc_html($date) . '</p>';


            $view_all_url = esc_url(home_url('/my-account/rfq'));
        } else {
            echo '<p class="latest-activity-item"><b>Lead Name:</b> ' . esc_html($latest_activity->product_name) . '</p>';
            $date_enquiry = date('d-m-y', strtotime($latest_activity->lead_created_on));
            echo '<p class="latest-activity-item"><b>Date Created:</b> ' . esc_html($date_enquiry) . '</p>';

            $view_all_url = esc_url(home_url('/my-account/enquiry'));
        }

        echo '</div>';
        echo '<a href="' . $view_all_url . '" ><Button class="view-all-my-account">View All</Button></a>';
        echo '</div>';
        echo '</div>';
    }
}

// Add content to the WooCommerce "My Account" dashboard
add_action('woocommerce_account_dashboard', 'display_latest_activity_in_dashboard');

// Non loggedin user see redirect button 

add_action('woocommerce_single_product_summary', 'show_login_button_for_guests', 35);

// function show_login_button_for_guests() {
//     if (!is_user_logged_in()) {
//         $account_url = 'https://gmmco.devitrosys.com/my-account/';
//         echo '<a href="' . esc_url($account_url) . '" class="button non-logged-in-rfq" style="margin-left:10px;">Request for Quote&nbsp; <i class="icon icon-mail"></i></a>';
//     }
// }

function show_login_button_for_guests()
{
    if (!is_user_logged_in()) {
        global $product; // Access the current product object
        if (!has_term('buy-used-equipment-to-buy', 'product_cat', $product->get_id())) {
            $account_url = site_url('/my-account/');
            echo '<a href="' . esc_url($account_url) . '" class="button non-logged-in-rfq" style="margin-left:10px;"><i class="icon icon-shopping-cart"></i>&nbsp;Rent Now</a>';
            echo '<a href="' . esc_url($account_url) . '" class="button non-logged-in-custom-rfq" style="margin-left:10px;"><i class="icon icon-quote"></i>&nbsp;Request for Quote</a>';
        }
    }
}

// Login dashboard customization-aseema
// Add "Sign In" text above login form
function custom_login_form_above()
{
    echo '<div class="sign-in-admin" style="top: 0px !important;
    position: absolute !important; color: red;font-size: 20px;"><h4 style="line-height:1;margin-top:20px;">Sign In</h4><br><br></div>';
}
add_action('login_form', 'custom_login_form_above');


// add two more items finance and logsheet -- Aseema 30-06-24

function add_finance_my_account_endpoint()
{
    add_rewrite_endpoint('finance', EP_ROOT | EP_PAGES);
}
add_action('init', 'add_finance_my_account_endpoint');

// Add the new item to the My Account menu
function add_finance_link_my_account($items)
{
    $items['finance'] = 'Payments';
    return $items;
}
add_filter('woocommerce_account_menu_items', 'add_finance_link_my_account');

// Content for the new menu item
function finance_my_account_content()
{
    // Ensure the user is logged in
    if (!is_user_logged_in()) {
        echo '<p>You need to be logged in to view this information.</p>';
        return;
    }

    // Get the current logged-in user ID
    $user_id = get_current_user_id();

    // Retrieve WooCommerce orders for the current user
    $customer_orders = wc_get_orders(array(
        'customer_id' => $user_id,
        'status' => array('sdp', 'work_order', 'completed', 'processing', 'pending', 'opassigned', 'equipmentassigned'),
        'orderby' => 'date',
        'order' => 'DESC',
    ));

    // Check if the user has any orders
    if (empty($customer_orders)) {
        echo '<p>No financial data found for your account.</p>';
        return;
    }

    // Render the table
    echo '<table border="1" style="width: 100%; border-collapse: collapse;" class="shop_table shop_table_responsive my_account_orders">';
    echo '<thead>';
    echo '<tr>';
    echo '<th class="woocommerce-orders-table__header">Sr. No</th>';
    echo '<th class="woocommerce-orders-table__header">Order ID</th>';
    echo '<th class="woocommerce-orders-table__header">Payment Amount</th>';
    echo '<th class="woocommerce-orders-table__header">Payment Date</th>';
    echo '<th class="woocommerce-orders-table__header">Remarks</th>';
    echo '</tr>';
    echo '</thead>';
    echo '<tbody>';

    // Iterate through orders and populate rows
    foreach ($customer_orders as $index => $order) {
        $row_class = ($index % 2 == 0) ? 'even-row' : 'odd-row';

        // Retrieve order details
        $order_id = $order->get_id();
        $payment_status = wc_get_order_status_name($order->get_status());
        $remarks = 'Transaction ID #' . $order->get_transaction_id(); // Replace as needed
        $rental_amount = $order->get_meta('rental_amount');
        // Fetch and format payment_date
        $payment_date_raw = $order->get_meta('payment_date');
        $payment_date = $payment_date_raw;

        // Parse and reformat the date (if it's valid)
        $date_obj = DateTime::createFromFormat('d-m-y', $payment_date_raw) ?: DateTime::createFromFormat('Y-m-d', $payment_date_raw);
        $payment_date = $date_obj ? $date_obj->format('d-m-y') : $payment_date;


        // Strip any HTML and format as plain text if necessary
        $formatted_rental_amount = $rental_amount ? number_format((float) $rental_amount, 2) : 'N/A';

        // Retrieve the doc_reference_num
        $doc_reference_num = $order->get_meta('doc_reference_num');
        $remarks = "The order status is <span style='color: green;'>{$payment_status}</span>" .
            (!empty($doc_reference_num) ? " with <span style='color: green;'>{$doc_reference_num}</span>" : '');

        echo '<style>
            .shop_table td {
                color: black;
            }
        </style>';

        echo '<tr class="' . esc_attr($row_class) . '">';
        echo '<td>' . esc_html($index + 1) . '</td>';
        echo '<td>' . esc_html($order_id) . '</td>';
        echo '<td>' . esc_html($formatted_rental_amount) . '</td>';
        echo '<td>' . esc_html($payment_date) . '</td>';
        echo '<td>' . wp_kses_post($remarks) . '</td>';
        echo '</tr>';
    }

    echo '</tbody>';
    echo '</table>';

    // Add some basic CSS styles
    echo '<style>
        .even-row { background-color: #fff !important; }
        .odd-row { background-color: #ffbd2b30 !important; }
    </style>';
}

add_action('woocommerce_account_finance_endpoint', 'finance_my_account_content');

// hide menu for opertor myaccount page- Aseema
function hide_finance_menu_for_operator()
{
    if (current_user_can('operator')) {
        // Ensure jQuery is enqueued
        wp_enqueue_script('jquery');

        // Add inline script to hide Finance menu item for operator role
        $script = "
            jQuery(document).ready(function($) {
                $('.woocommerce-MyAccount-navigation-link--finance').hide();
                $('.woocommerce-MyAccount-navigation-link--logsheet').hide();
                $('.woocommerce-MyAccount-navigation-link--orders').hide();
                $('.woocommerce-MyAccount-navigation-link--edit-account').hide();
            });
        ";

        // Add the inline script
        wp_add_inline_script('jquery', $script);
    }
}
add_action('wp_enqueue_scripts', 'hide_finance_menu_for_operator');

// hide admin-bar for operor
add_action('after_setup_theme', 'hide_admin_bar_for_operator');

function hide_admin_bar_for_operator()
{
    if (current_user_can('operator')) {
        add_filter('show_admin_bar', '__return_false');
    }
}

// Add the Purpose Of Listing field to the general product data section --bhaskar d-13-08-24
add_action('woocommerce_product_options_general_product_data', 'add_purpose_of_listing_field');

function add_purpose_of_listing_field()
{
    global $post;

    // Get the current value of the custom field
    $purpose_of_listing = get_post_meta($post->ID, 'purpose_of_listing', true);
    if (!$purpose_of_listing) {
        $purpose_of_listing = 'Renting'; // Default value
    }

    echo '<div class="options_group">';

    // Add a title and radio buttons inline with CSS for alignment
    echo '<p class="form-field">
    <label style="margin-right: 10px;">Purpose Of Listing:</label>  <br>
    <label style="margin-right: 100px;"><input type="radio" name="purpose_of_listing" value="Sales" ' . checked('Sales', $purpose_of_listing, false) . ' /> Sales</label>  
    <label style="margin-right: 200px;"><input type="radio" name="purpose_of_listing" value="Renting" ' . checked('Renting', $purpose_of_listing, false) . ' /> Renting</label>
    <label style="margin-right: 300px;"><input type="radio" name="purpose_of_listing" value="Display" ' . checked('Display', $purpose_of_listing, false) . ' /> Display</label>
    ';
    echo '</p>';
    echo '</div>';
}

// Save the custom field value
add_action('woocommerce_process_product_meta', 'save_purpose_of_listing_field');

function save_purpose_of_listing_field($post_id)
{
    if (isset($_POST['purpose_of_listing'])) {
        update_post_meta($post_id, 'purpose_of_listing', sanitize_text_field($_POST['purpose_of_listing']));
    } else {
        $purpose_of_listing = 'Renting';
        // Set the default value if not set
        update_post_meta($post_id, 'purpose_of_listing', $purpose_of_listing);
    }
}

// Filter the products by the selected purpose_of_listing value in Products Page
add_filter('request', 'filter_products_query_by_purpose_of_listing');

function filter_products_query_by_purpose_of_listing($query_vars)
{
    global $typenow;

    if ($typenow == 'product' && isset($_GET['purpose_of_listing']) && !empty($_GET['purpose_of_listing'])) {
        $query_vars['meta_query'] = array(
            array(
                'key' => 'purpose_of_listing',
                'value' => sanitize_text_field($_GET['purpose_of_listing']),
                'compare' => '='
            )
        );
    }

    return $query_vars;
}

// Add a new column to the products list table
add_filter('manage_edit-product_columns', 'add_purpose_of_listing_product_column');
function add_purpose_of_listing_product_column($columns)
{
    $columns['purpose_of_listing'] = __('Purpose', 'woocommerce');
    return $columns;
}

// Populate the new column with data
add_action('manage_product_posts_custom_column', 'populate_purpose_of_listing_column', 10, 2);
function populate_purpose_of_listing_column($column, $post_id)
{
    if ($column == 'purpose_of_listing') {
        $purpose_of_listing = get_post_meta($post_id, 'purpose_of_listing', true);
        echo esc_html($purpose_of_listing);
    }
}
//--end--
// added logo for admin dashboard
function add_custom_admin_bar_image($wp_admin_bar)
{
    // Remove the site name from the admin bar
    $wp_admin_bar->remove_node('site-name');

    // URL of the image, using home_url() to make it dynamic
    $image_url = home_url('/wp-content/uploads/2024/06/gmmco-cat-rental-logo.png');

    // URL of the homepage
    $homepage_url = home_url();

    // Adding the image to the admin bar
    $args = array(
        'id' => 'custom-admin-bar-image',
        'title' => '<img src="' . esc_url($image_url) . '" style="height: 40px; width: 134px; vertical-align: middle;" alt="Custom Image">',
        'meta' => array(
            'class' => 'custom-admin-bar-image-class'
        ),
        'parent' => false // This ensures it is added to the top-level
    );

    $wp_admin_bar->add_node($args);
}
add_action('admin_bar_menu', 'add_custom_admin_bar_image', 999);

// hide import and export button for other role except admin and central admin

function restrict_product_import_export_buttons_visibility()
{
    // Check if the current user has the role 'administrator' or 'central_administrator'
    if (current_user_can('administrator') || current_user_can('central_administrator')) {
        return; // Do nothing, allow the buttons to be visible
    }

    // Hide the WooCommerce import and export buttons for other roles
    add_action('admin_footer', 'hide_import_export_buttons');
}

function hide_import_export_buttons()
{
    echo '<style>
        a.page-title-action[href*="import"], /* Hide import button */
        a.page-title-action[href*="export"] { /* Hide export button */
            display: none !important;
        }
    </style>';
}

add_action('admin_menu', 'restrict_product_import_export_buttons_visibility');

// highlight active menu
function highlight_current_menu_item()
{
    // Get the current URL path
    $current_url_path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);

    // Determine which menu item to highlight based on the URL
    $menu_id = '';
    if ($current_url_path === '/about-us/') {
        $menu_id = 'about-menu';
    } elseif ($current_url_path === '/rent/') {
        $menu_id = 'rent-menu';
    } elseif ($current_url_path === '/buy-used/') {
        $menu_id = 'buy-menu';
    } elseif ($current_url_path === '/sell-your-equipment/') {
        $menu_id = 'sell-menu';
    }

    // If a menu item needs to be highlighted, output the corresponding style
    if ($menu_id) {
        echo '<style>
            #' . $menu_id . ' a {
                color: #FFBD2B !important;
            }
        </style>';
    }
}
add_action('wp_head', 'highlight_current_menu_item');


// add horizontal scroller
// Enqueue custom admin CSS for horizontal scrolling
add_action('admin_enqueue_scripts', 'add_custom_admin_styles');
function add_custom_admin_styles()
{
    echo '
    <style>
        /* Make the product table horizontally scrollable */
        .wp-list-table.widefat.fixed.striped.table-view-list.posts {
            display: block !important;
            overflow-x: auto !important;
            white-space: nowrap !important;
        }

        /* Ensure each table cell maintains its width */
        .wp-list-table.widefat.fixed.striped.products th,
        .wp-list-table.widefat.fixed.striped.products td {
            min-width: 150px;
        }
    </style>';
}
// Add custom columns to product table
add_filter('manage_edit-product_columns', 'add_custom_product_columns');
function add_custom_product_columns($columns)
{
    $columns['equipment_number'] = __('Equipment Number');
    $columns['equipment_serial_number'] = __('Equipment Serial No');
    $columns['registration_number'] = __('Reg No.');
    $columns['_product_region'] = __('Product Region');
    $columns['status'] = __('Product Status');
    $columns['model_number'] = __('Model Number');
    $columns['st3st5_field'] = __('ST3/ST5');
    $columns['acquisition_cost'] = __('Acquisition Cost (₹)');
    $columns['acquisition_date'] = __('Acquisition Date');
    $columns['pa_brand'] = __('Brand');
    return $columns;
}


// Populate custom column with meta data

add_action('manage_product_posts_custom_column', 'display_custom_product_columns', 10, 2);
function display_custom_product_columns($column, $post_id)
{
    if ('equipment_number' === $column) {
        $equipment_number = get_post_meta($post_id, 'equipment_number', true);
        echo esc_html($equipment_number);
    }

    if ('equipment_serial_number' === $column) {
        $equipment_serial_number = get_post_meta($post_id, 'equipment_serial_number', true);
        echo esc_html($equipment_serial_number);
    }
    if ('registration_number' === $column) { // Handle the new column
        $registration_number = get_post_meta($post_id, 'registration_number', true);
        echo esc_html($registration_number);
    }
    if ('_product_region' === $column) { // Handle the new column
        $product_region = get_post_meta($post_id, '_product_region', true);
        echo esc_html($product_region);
    }
    if ('status' === $column) { // Handle the new column
        $product_status = get_post_meta($post_id, 'status', true);
        echo esc_html($product_status);
    }
    if ('model_number' === $column) { // Handle the new column
        $model_number = get_post_meta($post_id, 'model_number', true);
        echo esc_html($model_number);
    }
    if ('st3st5_field' === $column) { // Handle the new column
        $ST3_ST5 = get_post_meta($post_id, 'st3st5_field', true);
        echo esc_html($ST3_ST5);
    }
    if ('acquisition_cost' === $column) { // Handle the new column
        $acquisition_cost = get_post_meta($post_id, 'acquisition_cost', true);
        echo esc_html($acquisition_cost);
    }
    if ('acquisition_date' === $column) { // Handle the new column
        $acquisition_date = get_post_meta($post_id, 'acquisition_date', true);
        // echo esc_html($acquisition_date);
        // echo esc_html(date('d/m/Y', strtotime($acquisition_date)));
        $date = DateTime::createFromFormat('Ymd', $acquisition_date);
        // Format the date as dd/mm/yyyy
        echo esc_html($date ? $date->format('d/m/Y') : '');


    }
}
add_action('manage_product_posts_custom_column', 'display_brand_column_in_product_table', 10, 2);
function display_brand_column_in_product_table($column, $post_id)
{
    if ('pa_brand' === $column) {
        $terms = get_the_terms($post_id, 'pa_brand');
        if ($terms && !is_wp_error($terms)) {
            $brand_names = wp_list_pluck($terms, 'name');
            echo esc_html(join(', ', $brand_names)); // Display comma-separated list of brand names
        } else {
            echo __('No Brand', 'your-text-domain'); // If no brand is found
        }
    }
}
// For Aseema's Work Order Plugin
function register_work_order_status()
{
    register_post_status('wc-work_order', array(
        'label' => 'Work Order Created',
        'public' => true,
        'exclude_from_search' => false,
        'show_in_admin_all_list' => true,
        'show_in_admin_status_list' => true,
        'label_count' => _n_noop('Work Order <span class="count">(%s)</span>', 'Work Order Created <span class="count">(%s)</span>')
    ));
}
add_action('init', 'register_work_order_status');

// Add "Work Order" status to WooCommerce order statuses

function add_work_order_status($order_statuses)
{
    $order_statuses['wc-work_order'] = _x('Work Order Created', 'Order status', 'woocommerce');
    return $order_statuses;
}
add_filter('wc_order_statuses', 'add_work_order_status');

// Adding on 02-10-2024 at 12:39  - Aseema 

function register_work_order_status_for_renewal()
{
    register_post_status('wc-renewal_status', array(
        'label' => 'Contract Renewal Requested',
        'public' => true,
        'exclude_from_search' => false,
        'show_in_admin_all_list' => true,
        'show_in_admin_status_list' => true,
        'label_count' => _n_noop('Contract Renewal <span class="count">(%s)</span>', 'Contract Renewal Requested <span class="count">(%s)</span>')
    ));
}
add_action('init', 'register_work_order_status_for_renewal');

// Add "Work Order" status to WooCommerce order statuses
add_filter('wc_order_statuses', 'add_renewal_status');
function add_renewal_status($order_statuses)
{
    $order_statuses['wc-renewal_status'] = _x('Contract Renewal Requested', 'Order status', 'woocommerce');
    return $order_statuses;
}

// Register new custom order status
function register_contract_renewed_order_status()
{
    register_post_status('wc-contract-renewed', array(
        'label' => _x('Contract Renewed', 'Order status', 'your-textdomain'),
        'public' => true,
        'exclude_from_search' => false,
        'show_in_admin_all_list' => true,
        'show_in_admin_status_list' => true,
        'label_count' => _n_noop('Contract Renewed (%s)', 'Contract Renewed (%s)', 'your-textdomain'),
    ));
}
add_action('init', 'register_contract_renewed_order_status');

// Add custom status to WooCommerce order statuses
function add_contract_renewed_to_order_statuses($order_statuses)
{
    $new_statuses = array();

    // Insert the new status after a specific point, here after 'completed'
    foreach ($order_statuses as $key => $status) {
        $new_statuses[$key] = $status;
        if ('wc-completed' === $key) {
            $new_statuses['wc-contract-renewed'] = _x('Contract Renewed', 'Order status', 'your-textdomain');
        }
    }

    return $new_statuses;
}
add_filter('wc_order_statuses', 'add_contract_renewed_to_order_statuses');

// For Business Dashboard

add_action('admin_menu', 'my_custom_menu');

function my_custom_menu()
{
    // Add a menu item to the WordPress sidebar
    add_menu_page(
        'Send Data', // Page title
        'Send Data', // Menu title
        'manage_options', // Capability required
        'send-data', // Menu slug
        'my_send_data_page', // Function to display the page content
        'dashicons-upload', // Icon (you can change this)
        6 // Position
    );
}

function my_send_data_page()
{
    ?>
    <div class="wrap">
        <h1>Send Data to Fleet Usage</h1>
        <form method="post" action="">
            <?php
            // Add a nonce field for security
            wp_nonce_field('send_data_to_fleet_nonce_action', 'send_data_to_fleet_nonce');
            ?>
            <input type="submit" name="send_data_button" class="button button-primary" value="Send Data">
        </form>
        <?php
        // Display success or error message after the form submission
        if (isset($_POST['send_data_button'])) {
            my_handle_data_submission();
        }
        ?>
    </div>
    <?php
}


function my_handle_data_submission()
{
    global $wpdb;

    // Verify the nonce for security
    if (!isset($_POST['send_data_to_fleet_nonce']) || !wp_verify_nonce($_POST['send_data_to_fleet_nonce'], 'send_data_to_fleet_nonce_action')) {
        echo '<div class="notice notice-error"><p>Nonce verification failed.</p></div>';
        return;
    }

    // Define the cutoff date (April 1, 2024)
    $cutoff_date = '2024-04-01';

    // Query to get all rows from wp_archive_contract_data where contract_end_date is equal to or greater than the cutoff date
    $results = $wpdb->get_results(
        $wpdb->prepare(
            "SELECT equipment_model_no, hr_of_operation, contract_start_date, contract_end_date, contract_number
            FROM wp_archive_contract_data
            WHERE contract_end_date >= %s",
            $cutoff_date
        )
    );

    if ($results) {
        foreach ($results as $row) {
            // Prepare the data for insertion into wp_fleet_usage
            $model_no = $row->equipment_model_no;
            $total_used_hrs = $row->hr_of_operation; // This will be saved under hr_of_operation
            $contract_start_date = $row->contract_start_date;
            $contract_end_date = $row->contract_end_date;
            $contract_number = $row->contract_number; // Get the contract_number

            // Calculate the difference in days between contract_end_date and contract_start_date
            $start_date = new DateTime($contract_start_date);
            $end_date = new DateTime($contract_end_date);
            $interval = $start_date->diff($end_date);
            $for_days = $interval->days;

            // Fetch the product category name dynamically based on the model number
            $category_name = $wpdb->get_var(
                $wpdb->prepare(
                    "SELECT COALESCE(pt.name, t.name) AS category_name
                     FROM {$wpdb->posts} p
                     INNER JOIN {$wpdb->postmeta} pm ON p.ID = pm.post_id
                     INNER JOIN {$wpdb->term_relationships} tr ON p.ID = tr.object_id
                     INNER JOIN {$wpdb->term_taxonomy} tt ON tr.term_taxonomy_id = tt.term_taxonomy_id
                     INNER JOIN {$wpdb->terms} t ON tt.term_id = t.term_id
                     LEFT JOIN {$wpdb->term_taxonomy} ptt ON tt.parent = ptt.term_id
                     LEFT JOIN {$wpdb->terms} pt ON ptt.term_id = pt.term_id
                     WHERE pm.meta_key = 'model_number'
                       AND pm.meta_value = %s
                       AND p.post_type = 'product'
                       AND p.post_status = 'publish'
                       AND tt.taxonomy = 'product_cat'",
                    $model_no
                )
            );

            // Insert into wp_fleet_usage
            $inserted = $wpdb->insert(
                'wp_fleet_usage', // Table name
                array(
                    'model_no' => $model_no,
                    'hr_of_operation' => $total_used_hrs, // Save hr_of_operation here
                    'contract_start_date' => $contract_start_date,
                    'contract_end_date' => $contract_end_date,
                    'for_days' => $for_days, // The difference in days between start and end date
                    'category_name' => $category_name, // Insert the dynamic category name
                    'contract_number' => $contract_number,
                    // Insert the contract number
                ),
                array('%s', '%d', '%s', '%s', '%d', '%s', '%s') // Data types: string, integer, string, string, integer, string, string
            );

            if ($inserted) {
                // Get the last inserted ID
                $fleet_usage_id = $wpdb->insert_id;

                // Create a clone of the start date for iteration
                $current_date = clone $start_date;

                // Loop through each month between the start and end date
                while ($current_date <= $end_date) {
                    // Get the number of days in the current month
                    $days_in_month = cal_days_in_month(CAL_GREGORIAN, $current_date->format('n'), $current_date->format('Y'));

                    // Determine how many days to consider for this month
                    if ($current_date->format('Y-m') == $start_date->format('Y-m')) {
                        // If it's the start month, count only the remaining days in the month
                        $days_in_this_month = $days_in_month - $start_date->format('d') + 1;
                        // Calculate usage for the start month
                        $usage_for_this_month = ($total_used_hrs / ($start_date->diff($end_date)->days + 1)) * $days_in_this_month;
                    } elseif ($current_date->format('Y-m') == $end_date->format('Y-m')) {
                        // If it's the end month, count only up to the end date
                        $days_in_this_month = $end_date->format('d');
                        // Calculate usage for the end month
                        $usage_for_this_month = ($total_used_hrs / ($start_date->diff($end_date)->days + 1)) * $days_in_this_month;
                    } else {
                        // If it's a full month in between, set the usage to hr_of_operation
                        $days_in_this_month = $days_in_month; // Full month
                        $usage_for_this_month = $total_used_hrs; // Use hr_of_operation for full months
                    }

                    // Prepare month name and usage value
                    $month_name = $current_date->format('F Y');
                    $usage_value = round($usage_for_this_month); // Round to the nearest integer

                    // Insert into wp_fleet_usagemeta as individual entries
                    $wpdb->insert(
                        'wp_fleet_usagemeta', // Table name
                        array(
                            'fleet_usage_id' => $fleet_usage_id, // Use the last inserted ID
                            'meta_key' => $month_name, // Store month name
                            'meta_value' => $usage_value, // Store the usage value
                            'category_name' => $category_name, // Store category name
                            'model_no' => $model_no // Store model number
                        ),
                        array('%d', '%s', '%d', '%s', '%s') // Data types: integer, string, integer, string, string
                    );

                    // Move to the next month
                    $current_date->modify('first day of next month');
                }
            }
        }

        // Display success message
        echo '<div class="notice notice-success"><p>All qualifying rows have been inserted successfully into wp_fleet_usage and wp_fleet_usagemeta.</p></div>';
    } else {
        // Display error message if no matching data is available
        echo '<div class="notice notice-error"><p>No data available with contract_end_date on or after April 1, 2024.</p></div>';
    }
}

//  End of Business Dashboard

// Bhaskar Contract SAP ID

//-------- contract id update ----
// Add this code to your theme's functions.php file
// Add custom button to WooCommerce order edit page
/*
add_action('woocommerce_order_actions_end', 'add_get_contract_id_button');
function add_get_contract_id_button($order) {
    if (is_int($order)) {
        $order = wc_get_order($order); // Get the WC_Order object if $order is an ID
    }

    if ($order instanceof WC_Order) {
        $order_id = $order->get_id();
        $contract_id = $order->get_meta('contract_id');

        // Check if the contract ID exists and disable the button if it does
        $disabled = !empty($contract_id) ? 'disabled' : '';

        echo '<button type="button" class="button button-primary get-contract-id" data-order-id="' . esc_attr($order_id) . '" ' . $disabled . '>Get Contract ID</button>';
    }
}

// Add custom contract ID input field and buttons to WooCommerce order edit page

add_action('woocommerce_admin_order_data_after_order_details', 'add_contract_id_input_field');
function add_contract_id_input_field($order) {
    if (is_int($order)) {
        $order = wc_get_order($order); // Get the WC_Order object if $order is an ID
    }

    if ($order instanceof WC_Order) {
        $order_id = $order->get_id();
        $contract_id = $order->get_meta('contract_id');

        // Disable the input and buttons if the contract ID exists
        $disabled = !empty($contract_id) ? 'disabled' : '';

        // Display the input field and buttons
        echo '<div class="contract-id-section" style="margin-bottom: 20px;">';
        echo '<h4>Rental Contract ID</h4>';
        //echo '<label for="contract_id_input">Enter Contract ID:</label>';
        echo '<input type="text" id="contract_id_input" name="contract_id_input" value="' . esc_attr($contract_id) . '" ' . $disabled . ' style="margin-bottom: 10px;" />';
        echo '<button type="button" class="button button-primary update-contract-id" data-order-id="' . esc_attr($order_id) . '" ' . $disabled . '>Update</button>';
        echo '</div>';
    }
}


// Handle AJAX request to manually update the contract ID and ensure it's unique
add_action('wp_ajax_update_contract_id', 'update_contract_id_ajax');
function update_contract_id_ajax() {
    check_ajax_referer('get_contract_id_nonce', 'nonce');

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

    if (!$order_id || empty($contract_id)) {
        wp_send_json_error('Invalid order ID or contract ID');
    }

    // Check if contract ID is already assigned to another order
    global $wpdb;
    $existing_order_id = $wpdb->get_var($wpdb->prepare(
        "SELECT post_id FROM {$wpdb->prefix}postmeta WHERE meta_key = 'contract_id' AND meta_value = %s AND post_id != %d",
        $contract_id, $order_id
    ));

    if ($existing_order_id) {
        wp_send_json_error('duplicate'); // Send 'duplicate' error if contract ID exists
    }

    $order = wc_get_order($order_id);

    if ($order) {
        // Update the contract ID in order meta
        $order->update_meta_data('contract_id', $contract_id);
        $order->save();

        wp_send_json_success(array('contract_id' => $contract_id));
    } else {
        wp_send_json_error('Order not found');
    }

}
add_action('wp_ajax_get_contract_id', 'handle_get_contract_id');
function handle_get_contract_id() {
    // Enable error reporting
    error_reporting(E_ALL);
    ini_set('display_errors', 1);

    if (!current_user_can('edit_shop_orders')) {
        wp_send_json_error('Permission denied');
    }

    $order_id = isset($_POST['order_id']) ? intval($_POST['order_id']) : 0;
    $order = wc_get_order($order_id);

    if (!$order) {
        wp_send_json_error('Invalid order ID');
    }


    // Retrieve required data from the order
    $data = array(
        'QuoteAcceptanceStatus' => 'Accepted'
    );

    foreach ($order->get_items() as $item) {
        $product = $item->get_product();
        $data['product_Name'] = $product->get_name();
        $data['product_Category'] = strip_tags(wc_get_product_category_list($product->get_id()));
        $data['Quantity'] = $item->get_quantity();
        $data['Sku'] = $product->get_sku();
        $data['EquipmentSerialNumber'] = $product->get_meta('EquipmentSerialNumber');
        $data['EquipmentModelNumber'] = $product->get_meta('EquipmentModelNumber');
        break; // Assuming we're only dealing with the first item in the order
    }

    $data['RentalCost'] = $order->get_meta('RentalCost');
    $data['SecurityDepositAmount'] = $order->get_meta('SecurityDepositAmount');
    $data['TotalPrice'] = $order->get_total();
    $data['RentalStartDate'] = $order->get_meta('RentalStartDate');
    $data['RentalEndDate'] = $order->get_meta('RentalEndDate');
    $data['RentalHours'] = $order->get_meta('RentalHours');

    // Log debugging
    error_log('Data to be inserted: ' . print_r($data, true));

    // Insert data into test_contract table
    global $wpdb;
    $table_name = $wpdb->prefix . 'test_contract';
    $result = $wpdb->insert($table_name, $data);

    if ($result === false) {
        $wpdb_error = $wpdb->last_error;
        error_log('Database insertion error: ' . $wpdb_error);
        wp_send_json_error('Failed to insert data into test_contract table. Error: ' . $wpdb_error);
    } else {
        // 5. Retrieve cont_ID and update WooCommerce order ID
        $cont_id = $wpdb->insert_id;
        
        // Update the order meta with the new contract ID
        $order->update_meta_data('contract_id', $cont_id);
        $order->save();

        wp_send_json_success(array('contract_id' => $cont_id));
    }
}

// Enqueue JavaScript to handle button click
add_action('admin_enqueue_scripts', 'enqueue_get_contract_id_script');
function enqueue_get_contract_id_script($hook) {
    if ('post.php' !== $hook || 'shop_order' !== get_post_type() || get_post_type() != 'shop_order') {
        return;
    }

    // Get the child theme directory URL
    $child_theme_dir = get_stylesheet_directory_uri();
    
    // Enqueue the script
    wp_enqueue_script('get-contract-id', $child_theme_dir . '/js/get-contract-id.js', array('jquery'), time(), true);
    
    // Localize the script with new data
    wp_localize_script('get-contract-id', 'get_contract_id_ajax', array(
        'ajax_url' => admin_url('admin-ajax.php'),
        'nonce' => wp_create_nonce('get_contract_id_nonce')
    ));

    // Debug: Print script information
    error_log('Enqueued script: ' . $child_theme_dir . '/js/get-contract-id.js');
}


//Replace WooCommerce Order Number with Contract ID

add_filter('woocommerce_order_number', 'replace_order_number_with_contract_id', 10, 2);
function replace_order_number_with_contract_id($order_number, $order) {
    $contract_id = $order->get_meta('contract_id');
    if (!empty($contract_id)) {
        return $order_number.' #SAP CONT-' . $contract_id;
    }
    return $order_number;
}


// Modify the order data for API requests
add_filter('woocommerce_api_order_response', 'modify_api_order_response', 10, 2);
function modify_api_order_response($order_data, $order) {
    $contract_id = $order->get_meta('contract_id');
    if (!empty($contract_id)) {
        $order_data['number'] = 'CONT-' . $contract_id;
    }
    return $order_data;
}

// Update order search to include contract ID
add_filter('woocommerce_shop_order_search_fields', 'add_contract_id_to_order_search');
function add_contract_id_to_order_search($search_fields) {
    $search_fields[] = 'contract_id';
    return $search_fields;
}

// Ensure the contract ID is displayed in the order list
add_filter('manage_edit-shop_order_columns', 'add_contract_id_column');
function add_contract_id_column($columns) {
    $new_columns = array();
    foreach ($columns as $key => $column) {
        if ($key == 'order_number') {
            $new_columns[$key] = 'Contract/Order ID';
        } else {
            $new_columns[$key] = $column;
        }
    }
    return $new_columns;
}

// Display the contract ID in the order list
add_action('manage_shop_order_posts_custom_column', 'display_contract_id_in_column', 20, 2);
function display_contract_id_in_column($column, $post_id) {
    if ($column == 'order_number') {
        $order = wc_get_order($post_id);
        $contract_id = $order->get_meta('contract_id');
        if (!empty($contract_id)) {
            echo ' ';
        } else {
            echo $order->get_order_number();
        }
    }
}


// Replace "Order" with "RentalContract" in various places
add_filter('gettext', 'replace_order_with_rms_contract', 10, 3);
add_filter('ngettext', 'replace_order_with_rms_contract', 10, 3);

function replace_order_with_rms_contract($translated, $original, $domain) {
    if (is_admin() && 'woocommerce' === $domain) {
        $translated = str_replace('Order', 'Rental Contract', $translated);
        $translated = str_replace('order', 'Rental Contract', $translated);
        $translated = str_replace('ORDER', 'RENTAL CONTRACT', $translated);
        

    }
    return $translated;
}

// function to change the order data heading
add_filter('woocommerce_admin_order_preview_title', 'change_order_to_contract_in_preview', 10, 2);
add_filter('woocommerce_admin_order_data_after_order_details', 'change_order_to_contract_in_details', 10, 1);

function change_order_to_contract_in_preview($title, $order) {
    return str_replace('Order', 'RMS Rental Contract', $title);
}

function change_order_to_contract_in_details($order) {
    ?>
    <script type="text/javascript">
    jQuery(function($) {
        $('.woocommerce-order-data__heading').text(function(i, text) {
            return text.replace('Order', 'RMS Rental Contract');
        });
                       
        $('#woocommerce-order-notes .postbox-header h2').text('Rental Contract Notes');
        $('#woocommerce-order-actions .postbox-header h2').text('Rental Contract actions');
        $('#woocommerce-order-source-data .postbox-header h2').text('Rental Contract attribution');

        $('.order_notes .delete_note').remove();
    });
    </script>
    <?php
}
*/
// Bhaskar Contract SAP ID End 



// Add custom Operator meta box to Edit Rental Contract Section -- bhaskara
// add_action('add_meta_boxes', 'add_operator_order_meta_box');
// function add_operator_order_meta_box() {
//     add_meta_box(
//         'operator_order_meta_box',           
//         __('Operator Information', 'textdomain'), 
//         'display_operator_order_meta_box',   
//         'shop_order',                     
//         'side',                          
//         'high'                          
//     );
// }


// // Display Operator content in the custom meta box --bhaskara
// function display_operator_order_meta_box($post) {
//     echo '<div class="operator-meta-box-content">';
//     echo '<h3>' . __('Assigned Operators', 'textdomain') . '</h3>';

//     $order_id = $post->ID;

//     $args = array(
//         'meta_key'     => 'contract_id',
//         'meta_value'   => $order_id, 
//         'meta_compare' => '='
//     );
//     $users = get_users($args);

//     if (!empty($users)) {
//         echo '<ul>';
//         foreach ($users as $user) {
//             $first_name = get_user_meta($user->ID, 'first_name', true);
//             // $Operator_id = get_user_meta($user->ID, 'Operator_id', true);
//             $hide_edit_flag = 1; // Set flag value as needed (1 to hide, 0 to show)
//             echo '<li><strong><a href="' . esc_url(admin_url('admin.php?page=edit-operator&id=' . $user->ID . '&hide_edit=' . $hide_edit_flag)) . '" target="_blank">' . esc_html($first_name) . ' -- ' . esc_html($user->ID) . '</a></strong></li>';
//         }
//         echo '</ul>';
//     } else {
//         echo '<p>' . __('No operator is assigned.', 'textdomain') . '</p>';
//         echo '<a href="' . admin_url('admin.php?page=operator-dashboard') . '" class="button button-primary">' . __('Assign Operator', 'textdomain') . '</a>';

//     }
//     echo '</div>';
// }
// End of Display Operator Meta Box

// Renal Fleet By Aseema


function rent_products_admin_menu()
{
    add_menu_page(
        'Rent Products',    // Page title
        'Prime Rental Fleet',    // Menu title
        'manage_options',   // Capability
        'rent-products',    // Menu slug
        'rent_products_page_content', // Callback function
        'dashicons-cart',   // Icon
        6                   // Position
    );
}
add_action('admin_menu', 'rent_products_admin_menu');
function rent_products_page_content()
{
    global $wpdb;

    $query = "
        SELECT p.ID AS product_id, p.post_title, pm_model.meta_value AS model_number
        FROM {$wpdb->prefix}posts p
        JOIN {$wpdb->prefix}postmeta pm ON p.ID = pm.post_id
        JOIN {$wpdb->prefix}term_relationships tr ON p.ID = tr.object_id
        JOIN {$wpdb->prefix}term_taxonomy tt ON tr.term_taxonomy_id = tt.term_taxonomy_id
        JOIN {$wpdb->prefix}terms t ON tt.term_id = t.term_id
        JOIN {$wpdb->prefix}postmeta pm_model ON p.ID = pm_model.post_id AND pm_model.meta_key = 'model_number'
        WHERE pm.meta_key = 'purpose_of_listing'
        AND pm.meta_value = 'display'
        AND tt.taxonomy = 'product_cat'
        AND t.name = 'rent'
        AND p.post_type = 'product'
        AND p.post_status = 'publish';
    ";

    // Execute the query
    $rent_products = $wpdb->get_results($query);

    // Display products in a table
    echo '<div class="wrap">';
    echo '<h1>Prime Rental Fleet For Customer Portal</h1>';
    echo '<table class="wp-list-table widefat fixed striped">';
    echo '<thead>';
    echo '<tr>';
    echo '<th>Image</th>';
    echo '<th>Brand Name</th>';
    echo '<th>Model Number</th>';
    echo '<th>Product Name</th>';
    // echo '<th>ID</th>';

    echo '</tr>';
    echo '</thead>';
    echo '<tbody>';

    if (!empty($rent_products)) {
        foreach ($rent_products as $product) {
            // Get the product object
            $wc_product = wc_get_product($product->product_id);
            // Get the brand attribute
            $attributes = $wc_product->get_attributes();


            $brand_name = '';

            if (isset($attributes['pa_brand']) && !empty($attributes['pa_brand'])) {
                // Fetch the terms associated with the brand attribute
                $brand_terms = $attributes['pa_brand']->get_terms();
                if (!empty($brand_terms)) {
                    // Join the brand terms into a comma-separated string
                    $brand_name = implode(', ', wp_list_pluck($brand_terms, 'name'));
                }
            }
            // echo $brand_name;

            $image_url = get_the_post_thumbnail_url($product->product_id, 'thumbnail');
            echo '<tr>';
            echo '<td>';
            if ($image_url) {
                echo '<img src="' . esc_url($image_url) . '" alt="' . esc_attr($product->post_title) . '" style="max-width: 100px; height: auto;"/> ';
            } else {
                echo 'No image';
            }
            echo '</td>';
            echo '<td style="font-size: 16px;">' . esc_html($brand_name) . '</td>';
            echo '<td style="font-size: 16px;">' . esc_html($product->model_number) . '</td>';
            echo '<td style="font-size: 16px;">' . esc_html($product->post_title) . '</td>';
            // echo '<td style="font-size: 16px;">' . esc_html($product->product_id) . '</td>';

            echo '</tr>';
        }
    } else {
        echo '<tr><td colspan="5">No products found.</td></tr>';
    }

    echo '</tbody>';
    echo '</table>';
    echo '</div>';
}

// Bhaskar Code for logsheet approval


// Add custom "Log Approval" tab to My Account menu --- Bhaskara

// add_filter('woocommerce_account_menu_items', 'add_log_approval_tab', 40);
// function add_log_approval_tab($items) {
//     $items['log-approval'] = __('Log Approval', 'your-textdomain');
//     return $items;
// }

// Start of Code for Customer Submit Message - 24/11/2024)
// Add endpoint for the new tab
add_action('init', 'add_log_approval_endpoint');
function add_log_approval_endpoint()
{
    add_rewrite_endpoint('log-approval', EP_ROOT | EP_PAGES);
}

// Display content for the Log Approval tab
add_action('woocommerce_account_log-approval_endpoint', 'log_approval_content');
function log_approval_content()
{
    global $wpdb;
    $customer_id = get_current_user_id();

    // Query the wp_log_files_data table for this user
    $logs = $wpdb->get_results($wpdb->prepare(
        "SELECT user_id, contract_id, log_url, working_hours, log_user_remarks, log_approve_status 
        FROM wp_log_files_data 
        WHERE customer_id = %d",
        $customer_id
    ));

    if ($logs) {
        echo '<h3>' . __('Your Log Approval Data', 'your-textdomain') . '</h3>';
        echo '<form method="post">';
        echo '<table class="shop_table">';
        echo '<thead>';
        echo '<tr>';
        echo '<th>' . __('Contract ID', 'your-textdomain') . '</th>';
        echo '<th>' . __('Operator ID', 'your-textdomain') . '</th>';
        echo '<th>' . __('Log File', 'your-textdomain') . '</th>';
        echo '<th>' . __('Working Hours', 'your-textdomain') . '</th>';
        echo '<th>' . __('Your Remarks', 'your-textdomain') . '</th>';
        echo '<th>' . __('Approval Status', 'your-textdomain') . '</th>';
        echo '<th>' . __('Action', 'your-textdomain') . '</th>';
        echo '</tr>';
        echo '</thead>';
        echo '<tbody>';

        foreach ($logs as $log) {
            ?>
            <tr>
                <td><?php
                $sapcontract_id = get_post_meta($log->contract_id, 'contract_id', true);
                echo esc_html($sapcontract_id); ?></td>
                <td><?php echo esc_html($log->user_id); ?></td>
                <td><a href="<?php echo esc_url($log->log_url); ?>" download><?php _e('Download Log', 'your-textdomain'); ?></a>
                </td>
                <td><?php echo esc_html($log->working_hours); ?></td>
                <td>
                    <input type="text" name="log_user_remarks[<?php echo esc_attr($log->contract_id); ?>]"
                        value="<?php echo esc_attr($log->log_user_remarks); ?>" />
                </td>
                <td>
                    <select name="log_approve_status[<?php echo esc_attr($log->contract_id); ?>]">
                        <option value="Pending" <?php selected($log->log_approve_status, 'Pending'); ?>>
                            <?php _e('Pending', 'your-textdomain'); ?>
                        </option>
                        <option value="Accepted" <?php selected($log->log_approve_status, 'Accepted'); ?>>
                            <?php _e('Accept', 'your-textdomain'); ?>
                        </option>
                        <option value="Modify" <?php selected($log->log_approve_status, 'Modify'); ?>>
                            <?php _e('Modify', 'your-textdomain'); ?>
                        </option>
                    </select>
                </td>
                <td>
                    <button type="submit" name="save_log_approval">Submit</button>
                </td>
            </tr>
            <?php
        }

        echo '</tbody>';
        echo '</table>';
        echo '</form>';
    } else {
        echo '<p>' . __('No logs found for approval.', 'your-textdomain') . '</p>';
    }

    // Handle form submission
    if (isset($_POST['save_log_approval'])) {
        $success = true; // Flag to track if all updates are successful

        foreach ($_POST['log_user_remarks'] as $contract_id => $remarks) {
            $log_approve_status = $_POST['log_approve_status'][$contract_id];

            // Update the database
            $update_result = $wpdb->update(
                'wp_log_files_data',
                [
                    'log_user_remarks' => sanitize_text_field($remarks),
                    'log_approve_status' => sanitize_text_field($log_approve_status),
                ],
                ['contract_id' => sanitize_text_field($contract_id), 'customer_id' => $customer_id],
                ['%s', '%s'],
                ['%s', '%d']
            );

            if ($update_result === false) {
                $success = false;
                break;
            }
        }

        // Add appropriate notice based on the update result
        if ($success) {
            wc_add_notice(__('Log Approval Status Submitted successfully!', 'your-textdomain'), 'success');
        } else {
            wc_add_notice(__('There was an error Submitting the Log Status. Please try again.', 'your-textdomain'), 'error');
        }

        // Redirect after save to avoid resubmission
        wp_safe_redirect(wc_get_account_endpoint_url('log-approval'));
        exit;
    }
}

// End of Code for Customer Submit Message - 24/11/2024)

// End of Logsheet Approval Code

// code to disable Contract Status Drop Down -- bhaskara 
add_action('admin_footer', 'disable_order_status_dropdown');
function disable_order_status_dropdown()
{
    $screen = get_current_screen();

    // Only run on the WooCommerce order edit page
    if (!$screen || $screen->id !== 'shop_order') {
        return;
    }
    ?>
    <style>
        /* Hide the dropdown arrow on the select element */
        #order_status {
            appearance: none !important;
            -webkit-appearance: none !important;
            -moz-appearance: none !important;
            background-color: #f0f0f0 !important;
            pointer-events: none !important;
            border: none !important;
            padding-right: 8px !important;
            background-image: none !important;
            cursor: default !important;
            color: #050505 !important;
        }

        /* Additional selectors to force remove dropdown arrow in different browsers */
        #order_status::-ms-expand {
            display: none !important;
        }

        /* Remove any custom WooCommerce styling */
        #order_status+.select2-container,
        #order_status~.select2-container {
            display: none !important;
        }

        /* Ensure the select container doesn't show any dropdown indicators */
        .select2-selection__arrow,
        .select2-selection__rendered:after {
            display: none !important;
        }

        /* Override any theme-specific styles */
        #order_status {
            position: relative !important;
        }

        #order_status::after {
            content: none !important;
        }
    </style>
    <script type="text/javascript">
        jQuery(document).ready(function ($) {
            // Get the current selected value
            var currentStatus = $('#order_status').val();

            // Create a hidden input to maintain the order status value
            $('<input>').attr({
                type: 'hidden',
                name: 'order_status',
                value: currentStatus
            }).insertAfter('#order_status');

            // Disable the visible dropdown and remove its name attribute
            $('#order_status').prop('disabled', true)
                .removeAttr('name')
                .attr('title', 'Status changes are automated')
                // Remove any existing select2 initialization
                .select2('destroy');

            // Prevent any click events
            $('#order_status').on('mousedown', function (e) {
                e.preventDefault();
                return false;
            });
        });
    </script>
    <?php
}

// Preserve the order status during updates
add_action('woocommerce_admin_process_order_object', 'preserve_order_status', 10, 2);
function preserve_order_status($order, $post_id)
{
    // If no status is provided in the POST data, maintain the current status
    if (!isset($_POST['order_status']) || empty($_POST['order_status'])) {
        $current_status = $order->get_status();
        $order->set_status($current_status);
    }
}

// Aseema 



// add_action('wp_ajax_save_order_upload_file', 'save_order_upload_file');

// function save_order_upload_file() {
//     // Check if file is uploaded and order ID is set
//     if (isset($_FILES['file']) && isset($_POST['order_id'])) {
//         $uploaded_file = $_FILES['file'];
//         $order_id = intval($_POST['order_id']);

//         // Set the upload directory
//         $upload_dir = wp_upload_dir();
//         $target_file = $upload_dir['path'] . '/' . basename($uploaded_file['name']);
//         $file_url = $upload_dir['url'] . '/' . basename($uploaded_file['name']);  // File URL

//         // Move the uploaded file to the upload directory
//         if (move_uploaded_file($uploaded_file['tmp_name'], $target_file)) {
//             // Save the file path to the order's post meta
//             update_post_meta($order_id, '_custom_upload_file', $file_url);

//             // Return success with file URL and name
//             wp_send_json_success(array(
//                 'message' => __('File uploaded successfully. To Save The Uploaded File, Please Update The Contract', 'your-text-domain'),
//                 'file_url' => $file_url,
//                 'file_name' => basename($target_file),
//             ));
//         } else {
//             wp_send_json_error(array('message' => __('File upload failed.', 'your-text-domain')));
//         }
//     } else {
//         wp_send_json_error(array('message' => __('No file or order ID provided.')));
//     }
// }

// Aseema 

// search user by phone number

add_action('pre_user_query', 'custom_user_search_by_phone_number');

function custom_user_search_by_phone_number($user_query)
{
    global $wpdb;
    if (!is_admin() || empty($user_query->query_vars['search'])) {
        return;
    }

    // Get the search term and sanitize it
    $search_string = $user_query->query_vars['search'];
    $search_string = trim($search_string, '*');

    // Join usermeta to allow searching by phone number
    $user_query->query_from .= " LEFT JOIN {$wpdb->usermeta} AS um ON {$wpdb->users}.ID = um.user_id ";

    // Modify the WHERE clause to include phone number search
    $user_query->query_where .= " OR (um.meta_key = 'user_phone' AND um.meta_value LIKE '%" . esc_sql($search_string) . "%')";
}

//  Aseema 

function custom_admin_title()
{
    echo '<title>' . get_bloginfo('name') . '</title>';
}
add_action('admin_head', 'custom_admin_title');

function custom_site_title($title)
{
    if (is_admin()) {
        return get_bloginfo('name');
    }
    return preg_replace('/\s*-\s*WordPress$/', '', $title);
}

add_filter('admin_title', 'custom_site_title');

// change status to security deposite paid if utr field and attach ref field has value 09/11/24
// function update_order_status_for_security_deposit_paid() {
//     global $wpdb;

//     // Query to check for any 'utr_field' value (non-empty)
//     $results = $wpdb->get_results(
//         "
//         SELECT meta1.post_id
//         FROM {$wpdb->postmeta} AS meta1
//         JOIN {$wpdb->postmeta} AS meta2 ON meta1.post_id = meta2.post_id
//         WHERE meta1.meta_key = 'utr_field' 
//         AND meta1.meta_value != ''
//         AND meta2.meta_key = '_custom_upload_file' 
//         AND meta2.meta_value != ''
//         "
//     );
//     // Loop through the results and update the order status
//     foreach ($results as $result) {
//         $order_id = $result->post_id;
//         $utr_field_value = $result->meta_value;

//         // Check if this is a valid WooCommerce order
//         $order = wc_get_order($order_id);
//         if ($order) {

//             $order->update_status('sdp', 'Security Deposit Paid for UTR: ' . $utr_field_value);
//         }
//     }
// }

// // Hook the function into WordPress or WooCommerce
// add_action('init', 'update_order_status_for_security_deposit_paid');

//  12-11-2024  Bhaskara 

//--- custom Code for related products----Bhakara--11/12/2024//
function custom_related_products_query_by_exact_category_id($related_posts, $product_id)
{
    $product = wc_get_product($product_id);

    // Get the primary category ID of the current product
    $categories = wp_get_post_terms($product_id, 'product_cat', array('fields' => 'ids'));

    if (empty($categories) || !$product) {
        return array(); // Return an empty array if no categories found or invalid product
    }

    // Use the first category ID (assuming it's the main one for filtering)
    $primary_category_id = $categories[0];

    // Set up custom query to fetch products from the exact category ID only
    $related_args = array(
        'post_type' => 'product',
        'posts_per_page' => 3,  // Limit to 3 products for desktop (CSS will handle mobile limit)
        'post__not_in' => array($product_id), // Exclude the current product
        'post_status' => 'publish', // Only show published products
        'tax_query' => array(
            array(
                'taxonomy' => 'product_cat',
                'field' => 'term_id', // Filter by exact category ID
                'terms' => $primary_category_id,
                'include_children' => false, // Exclude child category products
            ),
        ),
        'orderby' => 'rand', // Display in random order
    );

    $related_query = new WP_Query($related_args);

    // Extract product IDs from the query results
    $related_posts = wp_list_pluck($related_query->posts, 'ID');

    return $related_posts;
}
add_filter('woocommerce_related_products', 'custom_related_products_query_by_exact_category_id', 10, 2);

// Set the default number of related products and columns in WooCommerce
function set_related_products_limit($args)
{
    $args['posts_per_page'] = 3; // Limit to 3 products for desktop and tablet
    $args['columns'] = 3; // Display in 3 columns
    return $args;
}
add_filter('woocommerce_output_related_products_args', 'set_related_products_limit');

//------End---

//14-11-2024  Bhaskara

//---- hide add new Rental contract button--- bhaskara ---//
add_action('admin_footer', 'disable_add_new_order_button');

function disable_add_new_order_button()
{
    $screen = get_current_screen();
    // Run the script on both the orders list page and single order edit page
    if ($screen->id === 'edit-shop_order' || $screen->id === 'shop_order') {
        ?>
        <script type="text/javascript">
            document.addEventListener('DOMContentLoaded', function () {
                // Select the "Add Rental Contract" button
                const addOrderButton = document.querySelector('.page-title-action');
                if (addOrderButton && addOrderButton.textContent.includes('Add Rental Contract')) {
                    addOrderButton.style.display = 'none';
                }
            });
        </script>
        <?php
    }
}


//-------  hide view product from admin bar in product page ---- bhaskara--//
add_action('admin_bar_menu', 'remove_view_products_admin_bar_item', 999);

function remove_view_products_admin_bar_item($wp_admin_bar)
{
    $screen = get_current_screen();
    if ($screen->post_type === 'product') {
        // Remove the 'View products' item by its ID
        $wp_admin_bar->remove_node('archive');
    }
}

// Bhaskara 16-11-2024

add_action('wp_ajax_save_order_upload_file', 'save_order_upload_file');

function save_order_upload_file()
{
    // Check if file is uploaded and order ID is set
    if (isset($_FILES['file']) && isset($_POST['order_id'])) {
        $uploaded_file = $_FILES['file'];
        $order_id = intval($_POST['order_id']);

        // Set the upload directory
        $upload_dir = wp_upload_dir();
        $target_file = $upload_dir['path'] . '/' . basename($uploaded_file['name']);
        $file_url = $upload_dir['url'] . '/' . basename($uploaded_file['name']);  // File URL

        // Move the uploaded file to the upload directory
        if (move_uploaded_file($uploaded_file['tmp_name'], $target_file)) {
            // Save the file path to the order's post meta
            update_post_meta($order_id, '_custom_upload_file', $file_url);

            // Call the order status update function for this specific order
            update_order_status_for_security_deposit_paid($order_id);

            // Return success with file URL and name
            wp_send_json_success(array(
                'message' => __('File uploaded successfully. To Save The Uploaded File, Please Update The Contract', 'your-text-domain'),
                'file_url' => $file_url,
                'file_name' => basename($target_file),
            ));
        } else {
            wp_send_json_error(array('message' => __('File upload failed.', 'your-text-domain')));
        }
    } else {
        wp_send_json_error(array('message' => __('No file or order ID provided.')));
    }
}

// Update order status to 'Security Deposit Paid' if specific meta fields are filled
function update_order_status_for_security_deposit_paid($specific_order_id = null)
{
    global $wpdb;

    // Prepare the query to get orders with 'utr_field' and '_custom_upload_file' populated
    $query = "
        SELECT meta1.post_id
        FROM {$wpdb->postmeta} AS meta1
        JOIN {$wpdb->postmeta} AS meta2 ON meta1.post_id = meta2.post_id
        WHERE meta1.meta_key = 'utr_field' 
        AND meta1.meta_value != ''
        AND meta2.meta_key = '_custom_upload_file' 
        AND meta2.meta_value != ''
    ";

    // If a specific order ID is provided, add it to the query
    if ($specific_order_id) {
        $query .= " AND meta1.post_id = " . intval($specific_order_id);
    }

    $results = $wpdb->get_results($query);

    // Loop through the results and update the order status
    foreach ($results as $result) {
        $order_id = $result->post_id;

        // Check if this is a valid WooCommerce order
        $order = wc_get_order($order_id);
        if ($order && $order->get_status() === 'pending') {  // Ensure the status isn't already 'sdp'
            $utr_field_value = get_post_meta($order_id, 'utr_field', true);
            $order->update_status('sdp', 'Security Deposit Paid for UTR: ' . $utr_field_value);
        }
    }
}

// Optionally hook the status update function for periodic checks
add_action('init', 'update_order_status_for_security_deposit_paid');

// End of Bhaskara Code 16-11-2024


// Remove order preview button and functionality By Bhaskara 

function remove_order_preview_customizations()
{
    // Remove preview button using filter
    add_filter('woocommerce_admin_order_preview_enabled', '__return_false');

    // Add custom CSS to hide preview elements
    add_action('admin_head', 'add_custom_order_preview_css');
}
add_action('init', 'remove_order_preview_customizations');

// Function to add custom CSS
function add_custom_order_preview_css()
{
    $screen = get_current_screen();
    if (!$screen || !in_array($screen->id, array('edit-shop_order', 'woocommerce_page_wc-orders'))) {
        return;
    }
    ?>
    <style type="text/css">
        /* Hide eye icon in orders list */
        .post-type-shop_order .order_actions .order-preview,
        .post-type-shop_order td.wc_actions .order-preview,
        .post-type-shop_order .wc-action-button-preview,
        .post-type-shop_order button.order-preview,
        .post-type-shop_order a.order-preview,
        /* Target the specific eye icon */
        .order-preview .dashicons-visibility,
        /* More specific selectors based on your screenshot */
        table.wp-list-table .order-preview,
        .dashicons-visibility,
        /* Target the entire preview functionality */
        .order_actions .preview,
        .wc_actions .preview,
        /* Target by data attribute if present */
        [data-tip="Preview"],
        /* Most specific selector for the eye icon */
        .wp-list-table .wc-action-button.wc-action-button-preview {
            display: none !important;
            visibility: hidden !important;
            opacity: 0 !important;
            width: 0 !important;
            height: 0 !important;
            position: absolute !important;
            pointer-events: none !important;
        }
    </style>
    <?php
}

//------------ remove action column --- bhaskara 

add_action('current_screen', function () {
    global $wc_list_table;
    remove_filter('manage_shop_order_posts_columns', array($wc_list_table, 'define_columns'), 10);
}, 20);

//add your required column
add_filter('manage_shop_order_posts_columns', 'themeslug_add_required_column', 10, 2);

function themeslug_add_required_column($columns)
{
    $show_columns = array();
    $show_columns['cb'] = $columns['cb'];
    $show_columns['order_number'] = __('Order', 'woocommerce');
    $show_columns['order_date'] = __('Date', 'woocommerce');
    $show_columns['order_status'] = __('Status', 'woocommerce');
    $show_columns['billing_address'] = __('Billing', 'woocommerce');
    $show_columns['shipping_address'] = __('Ship to', 'woocommerce');
    $show_columns['order_total'] = __('Total', 'woocommerce');

    wp_enqueue_script('wc-orders');

    return $show_columns;
}
//-------end-----

// changed on 24-12-2024

add_filter('screen_options_show_screen', function ($show_screen) {
    if (is_admin() && strpos($_SERVER['REQUEST_URI'], 'profile.php') !== false || strpos($_SERVER['REQUEST_URI'], 'user-new.php') !== false || strpos($_SERVER['REQUEST_URI'], 'active-users') !== false || strpos($_SERVER['REQUEST_URI'], 'user-import') !== false) {
        return false;
    }
    return $show_screen;
});

// Remove Screen Options tab from WooCommerce attributes page
function hide_screen_options_for_product_attribute()
{
    global $pagenow;

    if ($pagenow === 'edit.php' && isset($_GET['post_type'], $_GET['page']) && $_GET['post_type'] === 'product' && $_GET['page'] === 'product_attributes') {
        wp_add_inline_style('wp-admin', '#screen-meta-links { display: none !important; }');
    }
}
add_action('admin_enqueue_scripts', 'hide_screen_options_for_product_attribute');

function hide_screen_options_for_operator()
{
    ?>
    <style>
        <?php if (isset($_GET['page']) && ($_GET['page'] === 'operator-dashboard' || $_GET['page'] === 'create_operators' || $_GET['page'] === 'sos' || $_GET['page'] === 'servicereq-dashboard' || $_GET['page'] === 'logsheet-dashboard')): ?>
            #screen-meta-links {
                display: none !important;
            }

        <?php endif; ?>
    </style>
    <?php
}
add_action('admin_enqueue_scripts', 'hide_screen_options_for_operator');

// --- Sale amount, Rental amount columns -- modified -- Bhaskara -- 24/03/2025
add_filter('manage_edit-shop_order_columns', 'add_rental_amount_column', 20);
function add_rental_amount_column($columns)
{
    $new_columns = [];

    foreach ($columns as $key => $column) {
        // Copy existing columns
        $new_columns[$key] = $column;

        // Add the Rental Amount column after Total
        if ('order_total' === $key) {
            $new_columns['rental_amount'] = __('Rental Amount', 'textdomain');
            $new_columns['sale_amount'] = __('Sale Amount', 'textdomain');

        }
    }

    return $new_columns;
}

add_action('manage_shop_order_posts_custom_column', 'populate_rental_amount_column', 20, 2);
function populate_rental_amount_column($column, $post_id)
{
    if ('rental_amount' === $column) {
        // Retrieve the rental amount from the custom field
        $rental_amount = get_post_meta($post_id, 'rental_amount', true);

        // Display the rental amount or a placeholder if it's empty
        echo !empty($rental_amount) ? wc_price($rental_amount) : __('N/A', 'textdomain');
    }
}

add_action('manage_shop_order_posts_custom_column', 'populate_order_amount_column', 99, 2);

function populate_order_amount_column($column, $post_id)
{
    if ('sale_amount' === $column) {

        // Retrieve the order total from the order meta
        $sale_amount = get_post_meta($post_id, 'sale_amount', true);
        $rental_amount = get_post_meta($post_id, 'rental_amount', true);

        if (!($sale_amount) && !($rental_amount)) {
            $order_total = get_post_meta($post_id, '_order_total', true);
            $sale_amount = $order_total;
        }
        // Output only our custom value, replacing the default
        echo ($sale_amount > 0) ? wc_price($sale_amount) : __('N/A', 'textdomain');
    }
}

// add_filter('manage_edit-shop_order_columns', 'replace_total_with_rental', 20);
// function replace_total_with_rental($columns) {
//     $columns['order_total'] = __('Sale Amount', 'textdomain');
//     return $columns;
// }

add_filter('manage_edit-shop_order_columns', 'remove_total_column_from_orders', 20);
function remove_total_column_from_orders($columns)
{
    if (isset($columns['order_total'])) {
        unset($columns['order_total']); // 'order_total' is the key for the Total column
    }
    return $columns;
}

// 19th December 2024

// Equipment Assign status -- Aseema
function register_equipement_assigned_order_status()
{
    register_post_status('wc-equipmentassigned', array(
        'label' => 'Equipment Assigned',
        'public' => true,
        'exclude_from_search' => false,
        'show_in_admin_all_list' => true,
        'show_in_admin_status_list' => true,
        'label_count' => _n_noop('Equipment Assigned <span class="count">(%s)</span>', 'Equipment Assigned <span class="count">(%s)</span>')
    ));
}
add_action('init', 'register_equipement_assigned_order_status');


add_filter('wc_order_statuses', 'equipement_assigned_order_status');
function equipement_assigned_order_status($order_statuses)
{
    $order_statuses['wc-equipmentassigned'] = _x('Equipment Assigned', 'Order status', 'woocommerce');
    return $order_statuses;
}

//-- end 

// Equipment Assign ---- Assema 16/12/2024

add_filter('wc_order_is_editable', 'make_order_editable', 10, 2);
function make_order_editable($is_editable, $order)
{
    if ($order) {
        // Disable editing for orders with 'pending' status
        if ('pending' === $order->get_status()) {
            return false;
        }

        // Allow editing for orders with 'sdp' status
        if ('sdp' === $order->get_status()) {
            return true;
        }
    }

    return $is_editable; // Default behavior for other statuses
}
add_filter('gettext', 'customize_order_edit_message', 10, 3);
function customize_order_edit_message($translated_text, $text, $domain)
{

    if ('To edit this Rental Contract change the status back to "Pending payment"' === $translated_text) {
        $translated_text = 'To assign the equipment to this Rental Contract update the security deposit details.';
    }
    return $translated_text;
}


add_action('init', 'check_and_change_order_status', 10);
function check_and_change_order_status()
{

    if (isset($_GET['post']) && is_admin() && 'shop_order' === get_post_type($_GET['post'])) {
        $order_id = intval($_GET['post']); // Get the order ID from the URL


        update_status_if_items_and_sdp($order_id);
    }
}

// Bhaskara enhancement for reduce stock and update status--

// add_action('woocommerce_order_status_changed', 'update_status_if_items_and_sdp', 10, 1);
// function update_status_if_items_and_sdp($order_id) {
//     global $wpdb;

//     // Get the WooCommerce order object
//     $order = wc_get_order($order_id);

//     // Check if the order exists and the status is 'sdp'
//     if ($order && 'sdp' === $order->get_status()) {

//         // Query to check for any items in the order
//         $query = $wpdb->prepare(
//             "SELECT COUNT(*) 
//              FROM {$wpdb->prefix}woocommerce_order_items 
//              WHERE order_id = %d",
//             $order_id
//         );

//         // Fetch the count of items in the order
//         $item_count = $wpdb->get_var($query);
//         $stock_reduced = false;
//         // If there are items in the order
//         if ($item_count == 1) {
//             // Reduce stock for each product in the order
//             foreach ($order->get_items() as $item_id => $item) {
//                 $product_id = $item->get_product_id();
//                 $quantity = $item->get_quantity();
//                 $purpose_of_listing = $item->get_meta('purpose_of_listing', true);

//                 // Reduce stock
//                 $product = wc_get_product($product_id);
//                 if($purpose_of_listing !== 'Display'){
//                 if ($product && $product->managing_stock()) {
//                     $stock_quantity = $product->get_stock_quantity();
//                     $new_stock_quantity = $stock_quantity - $quantity;

//                     // Ensure stock doesn't go negative
//                     if ($new_stock_quantity >= 0) {
//                         $product->set_stock_quantity($new_stock_quantity);
//                         $product->save();
//                         update_post_meta($product_id, 'status', 'ONRENT');
//                         $stock_reduced = true;
//                         // Add stock change note to the order
//                         $order->add_order_note(sprintf(
//                             __('Stock reduced: %d units of "%s". New stock: %d.', 'woocommerce'),
//                             $quantity,
//                             $product->get_name(),
//                             $new_stock_quantity
//                         ));
//                     } else {
//                         $order->add_order_note(sprintf(
//                             __('Insufficient stock for "%s". Stock not adjusted.', 'woocommerce'),
//                             $product->get_name()
//                         ));
//                     }
//                 }
//               }
//             }
//           if($stock_reduced){
//             // Update the order status to 'equipmentassigned'
//             $order->update_status('wc-equipmentassigned', 'Equipment added to Contract.');
//           }
//         }
//     }    

//     if ($order && 'work_location' === $order->get_status()) {
//         $end_date = $order->get_meta('end_date', true);

//         if (empty($end_date)) {
//             return;
//         }

//         // Current date in the same format as stored end_date
//         $current_date = date('d-m-Y');

//         // Convert dates to DateTime objects for comparison
//         $end_datetime = DateTime::createFromFormat('d-m-Y', $end_date);
//         $current_datetime = DateTime::createFromFormat('d-m-Y', $current_date);

//         // Check if current date is past the end date
//         if ($current_datetime > $end_datetime) {
//             $order->update_status('wc-rpo', 'Equipment Rental Period is Over');
//         }
//     }
// }

// Main hook with higher priority (20 instead of 10)
add_action('woocommerce_order_status_changed', 'update_status_if_items_and_sdp', 20, 1);
function update_status_if_items_and_sdp($order_id)
{
    // Get order object
    $order = wc_get_order($order_id);

    if (!$order) {
        error_log("Order $order_id not found");
        return;
    }

    $current_status = $order->get_status();
    error_log("Order $order_id status changed to: $current_status");

    // Handle 'sdp' status
    if ($current_status === 'sdp') {
        $items = $order->get_items();
        $item_count = count($items);

        error_log("SDP Order $order_id has $item_count items");

        if ($item_count === 1) {
            $stock_reduced = false;

            foreach ($items as $item_id => $item) {
                $product_id = $item->get_product_id();
                $quantity = $item->get_quantity();
                $purpose_of_listing = $item->get_meta('purpose_of_listing', true);
                $product = wc_get_product($product_id);

                if ($purpose_of_listing !== 'Display' && $product && $product->managing_stock()) {
                    $stock_quantity = $product->get_stock_quantity();
                    $new_stock_quantity = $stock_quantity - $quantity;

                    if ($new_stock_quantity >= 0) {
                        $product->set_stock_quantity($new_stock_quantity);
                        $product->save();
                        update_post_meta($product_id, 'status', 'ONRENT');
                        $stock_reduced = true;

                        $order->add_order_note(sprintf(
                            __('Stock reduced: %d units of "%s". New stock: %d.', 'woocommerce'),
                            $quantity,
                            $product->get_name(),
                            $new_stock_quantity
                        ));
                    } else {
                        $order->add_order_note(sprintf(
                            __('Insufficient stock for "%s". Stock not adjusted.', 'woocommerce'),
                            $product->get_name()
                        ));
                    }
                }
            }

            if ($stock_reduced) {
                $order->update_status('wc-equipmentassigned', 'Equipment added to Contract.');
                error_log("Order $order_id updated to wc-equipmentassigned");
            }
        }
    }

    // Handle 'work_location' status
    if ($current_status === 'work_location') {
        $end_date = $order->get_meta('end_date', true);

        if (empty($end_date)) {
            error_log("Order $order_id: No end_date found");
            return;
        }

        $current_date = date('d-m-Y');
        $end_datetime = DateTime::createFromFormat('d-m-Y', $end_date);
        $current_datetime = DateTime::createFromFormat('d-m-Y', $current_date);

        if ($end_datetime === false || $current_datetime === false) {
            error_log("Order $order_id: Date format error - end_date: $end_date, current_date: $current_date");
            return;
        }

        if ($current_datetime > $end_datetime) {
            $order->update_status('wc-rpo', 'Equipment Rental Period is Over');
            error_log("Order $order_id updated to wc-rpo");
        }
    }
}

// SSO - Login Page hide enquiry 
function completely_remove_enquiry_popup()
{
    if (is_page('sso-login')) {
        ?>
        <style>
            #floating-button,
            #enquiry-float-btn {
                display: none !important;
                visibility: hidden !important;
            }
        </style>
        <script>
            document.addEventListener('DOMContentLoaded', function () {
                // Disable the toggle function if it exists
                if (window.togglePopup) {
                    window.togglePopup = function () { };
                }

                // Remove the floating button completely
                var floatingButton = document.getElementById('floating-button');
                if (floatingButton) {
                    floatingButton.remove();
                }
            });
        </script>
        <?php
    }
}
add_action('wp_footer', 'completely_remove_enquiry_popup');

// SSO Login/Logout redirection
function redirect_gmmcoindia_users_on_logout()
{
    // Check if user is logged in
    if (is_user_logged_in()) {
        // Get current user
        $current_user = wp_get_current_user();

        // Check if email ends with "@gmmcoindia.com"
        if (strpos($current_user->user_email, '@gmmcoindia.com') !== false) {
            // Hook into logout action
            add_action('wp_logout', function () {
                // Redirect to SSO login page
                wp_redirect(home_url('/sso-login/'));
                exit();
            });
        }
    }
}
add_action('init', 'redirect_gmmcoindia_users_on_logout');

// // Alternative approach with more flexibility
// function advanced_domain_logout_redirect() {
//     // List of allowed email domains
//     $allowed_domains = ['@gmmcoindia.com'];

//     // Check if user is logged in
//     if (is_user_logged_in()) {
//         $current_user = wp_get_current_user();

//         // Check if user's email matches any of the domains
//         foreach ($allowed_domains as $domain) {
//             if (strpos($current_user->user_email, $domain) !== false) {
//                 add_filter('logout_url', function($logout_url) {
//                     // Modify logout URL to redirect to SSO login
//                     return add_query_arg('redirect_to', home_url('/sso-login/'), $logout_url);
//                 });

//                 add_action('wp_logout', function() {
//                     wp_redirect(home_url('/sso-login/'));
//                     exit();
//                 });

//                 break;
//             }
//         }
//     }
// }
// add_action('init', 'advanced_domain_logout_redirect');

// ideal logout --bhaskara--26/12/2024

add_action('admin_init', 'redirect_idle_admin_users');

// Check if current user has specific email domain
function has_specific_email_domain()
{
    if (is_user_logged_in()) {
        $user = wp_get_current_user();
        return strpos($user->user_email, '@gmmcoindia.com') !== false;
    }
    return false;
}

// Disable the WordPress auth check only for specific users
add_action('admin_enqueue_scripts', function () {
    if (has_specific_email_domain()) {
        wp_dequeue_script('wp-auth-check');
        wp_deregister_script('wp-auth-check');

        // Disable heartbeat only for specific users
        wp_dequeue_script('heartbeat');
        wp_deregister_script('heartbeat');
    }
}, 99);

function redirect_idle_admin_users()
{
    if (is_user_logged_in() && current_user_can('manage_options')) {
        $user = wp_get_current_user();

        if (strpos($user->user_email, '@gmmcoindia.com') !== false) {
            $idle_time = 15 * 60; // 15 minutes in seconds

            add_action('admin_enqueue_scripts', function () use ($idle_time) {
                wp_register_script('idle-logout-script', '', [], null, true);
                wp_enqueue_script('idle-logout-script');

                // Create a nonce for security
                $ajax_nonce = wp_create_nonce('idle_logout_nonce');

                wp_add_inline_script(
                    'idle-logout-script',
                    "
                    (function() {
                        let idleTime = 0;
                        const idleLimit = {$idle_time};
                        let idleInterval;

                        function resetTimer() {
                            idleTime = 0;
                        }

                        function handleLogout() {
                            clearInterval(idleInterval);
                            
                            // Send AJAX request to handle logout
                            jQuery.ajax({
                                url: '" . admin_url('admin-ajax.php') . "',
                                type: 'POST',
                                data: {
                                    action: 'handle_idle_logout',
                                    nonce: '" . $ajax_nonce . "'
                                },
                                success: function(response) {
                                    if(response.success) {
                                        window.location.href = '" . esc_js(home_url('/sso-login/')) . "';
                                    }
                                }
                            });
                        }

                        function startTimer() {
                            if (idleInterval) {
                                clearInterval(idleInterval);
                            }

                            idleInterval = setInterval(function() {
                                idleTime++;
                                if (idleTime >= idleLimit) {
                                    handleLogout();
                                }
                            }, 1000);
                        }

                        // Reset timer on user activity
                        const events = ['mousemove', 'keypress', 'click', 'scroll', 'touchstart'];
                        events.forEach(function(event) {
                            document.addEventListener(event, resetTimer);
                        });

                        // Initial timer start
                        startTimer();

                        // Reset timer when switching tabs/windows
                        document.addEventListener('visibilitychange', function() {
                            if (!document.hidden) {
                                resetTimer();
                            }
                        });
                    })();
                    "
                );
            });

            // Add AJAX handler for logout
            add_action('wp_ajax_handle_idle_logout', function () {
                check_ajax_referer('idle_logout_nonce', 'nonce');

                // Clear all sessions for the current user
                $user_id = get_current_user_id();
                wp_destroy_all_sessions($user_id);

                // Clear authentication cookies
                wp_clear_auth_cookie();

                wp_send_json_success(['message' => 'Logged out successfully']);
            });
        }
    }
}

// Modify logout redirect URL only for specific users
add_filter('logout_redirect', function ($redirect_to, $requested_redirect_to, $user) {
    if ($user && is_object($user) && strpos($user->user_email, '@gmmcoindia.com') !== false) {
        return home_url('/sso-login/');
    }
    return $redirect_to;
}, 10, 3);

// Reload to clear error msg in myaccount page (Shejad)
function custom_redirect_login_error()
{
    // Check if the current page is the "My Account" page or the page where the login error is displayed
    if (is_account_page() || is_page('login')) {
        ?>
        <script type="text/javascript">
            window.onload = function () {
                var url = new URL(window.location.href);
                url.searchParams.delete('login_error');
                window.history.replaceState({}, document.title, url.toString());
            };
        </script>
        <?php
    }
}
add_action('wp_footer', 'custom_redirect_login_error');

add_action('admin_enqueue_scripts', 'css_for_text_in_contract_page');

function css_for_text_in_contract_page($hook)
{

    if (isset($_GET['post_type']) && $_GET['post_type'] === 'shop_order') {
        echo '<style>
           th.sortable a span {
                color: #2c3338 !important; 
            }
        </style>';
    }
}

// create post type for notification

function create_notifications_post_type()
{
    $labels = array(
        'name' => 'Notifications',
        'singular_name' => 'Notification',
        'menu_name' => 'Notifications',
        'name_admin_bar' => 'Notification',
        'add_new' => 'Add New',
        'add_new_item' => 'Add New Notification',
        'new_item' => 'New Notification',
        'edit_item' => 'Edit Notification',
        'view_item' => 'View Notification',
        'all_items' => 'All Notifications',
        'search_items' => 'Search Notification',
        'parent_item_colon' => 'Parent Notifications:',
        'not_found' => 'No Notifications Found',
        'not_found_in_trash' => 'No Notifications Found in Trash'
    );
    $args = array(
        'labels' => $labels,
        'public' => false,
        'public_queryable' => true,
        'show_ui' => true,
        'show_in_menu' => true,
        'query_var' => true,
        'rewrite' => array('slug' => 'notifications'),
        'capability_type' => 'post',
        'has_archive' => true,
        'hierarchial' => false,
        'menu_position' => 1,
        'menu_icon' => 'dashicons-bell',
        'supports' => array('title', 'editor', 'custom-fields')
    );
    register_post_type('notifications', array(
        'labels' => array(
            'name' => 'Notifications',
            'singular_name' => 'Notification',
        ),
        'public' => true,
        'show_ui' => true,
        'show_in_menu' => true,
        'capability_type' => 'post',
        'map_meta_cap' => true,
        'supports' => array('title', 'editor'), // Remove 'custom-fields' if needed
        'show_in_admin_bar' => false, // Hide from the admin bar
        'show_in_nav_menus' => false,
        'menu_position' => 5,
        'menu_icon' => 'dashicons-bell',
        'capabilities' => array(
            'create_posts' => false, // Change this from 'do_not_allow' to `false`
        ),
    ));

}
add_action('init', 'create_notifications_post_type');

function custom_notifications_post_link($post_link, $post)
{
    if ($post->post_type === 'notifications') {
        return admin_url('post.php?post=' . $post->ID . '&action=edit');
    }
    return $post_link;
}
add_filter('post_type_link', 'custom_notifications_post_link', 10, 2);



// Step 1: Add a custom column to display the notification content in the listing page.
function add_notifications_columns($columns)
{
    $columns['notification_message'] = 'Notification Message';
    return $columns;
}
add_filter('manage_notifications_posts_columns', 'add_notifications_columns');

// Step 2: Render the notification message with HTML content in the custom column.
function render_notifications_columns($column, $post_id)
{
    if ($column == 'notification_message') {
        // Get the post content (notification message)
        $message = get_post_field('post_content', $post_id);

        // Make sure HTML is allowed and render it safely
        // wp_kses_post allows basic HTML tags (like <a>, <b>, <i>, etc.)
        echo wp_kses_post($message);  // This will render the HTML content safely
    }
}
add_action('manage_notifications_posts_custom_column', 'render_notifications_columns', 10, 2);

// Step 3: Prevent content from displaying below title in the admin post list
function remove_content_from_admin($content)
{
    // Check if we're on the post listing page for the 'notifications' post type
    if (is_admin() && get_post_type() == 'notifications') {
        return '';  // Return empty content so it won't show below the title
    }
    return $content; // Return the content normally for other pages
}
add_filter('the_content', 'remove_content_from_admin');

// Step 4: Make sure HTML content is rendered in the frontend
function render_notification_content($content)
{
    if (is_singular('notifications')) {
        // Allow HTML content in the notification (post content)
        return wp_kses_post($content);
    }
    return $content;
}
add_filter('the_content', 'render_notification_content');

// Step 5: Optional - Style the hyperlinks in the admin notification listing
function custom_admin_styles()
{
    echo '<style>
        .column-notification_message a {
            color: blue;
            text-decoration: underline;
        }
    </style>';
}
add_action('admin_head', 'custom_admin_styles');



// create notifications programatically

function create_notification($title, $message, $extra_info = array())
{
    // Ensure the custom post type 'notifications' exists
    if (!post_type_exists('notifications')) {
        return new WP_Error('invalid_post_type', 'The notification post type does not exist');
    }

    // Allow HTML in the message (post_content)
    // wp_kses_post allows basic HTML tags like <a>, <b>, <i>, etc.
    $message = wp_kses_post($message);

    // Prepare notification data
    $notifications_data = array(
        'post_title' => wp_strip_all_tags($title),  // Sanitize the title to remove any unwanted tags
        'post_content' => $message,                    // The content will contain HTML (e.g., the link)
        'post_status' => 'publish',
        'post_type' => 'notifications',
    );

    // Merge any extra info (meta data, custom fields, etc.)
    if (!empty($extra_info)) {
        $notifications_data = array_merge($notifications_data, $extra_info);
    }

    // Insert the notification post into the database
    $post_id = wp_insert_post($notifications_data);

    // Check for errors
    if (is_wp_error($post_id)) {
        return $post_id;
    }

    return $post_id;
}


function hide_add_new_notifications_menu()
{
    remove_submenu_page('edit.php?post_type=notifications', 'post-new.php?post_type=notifications');
}

add_action('admin_menu', 'hide_add_new_notifications_menu', 999);

function remove_edit_quick_edit_actions($actions, $post)
{
    // Check if the post type is 'notifications'
    if ($post->post_type === 'notifications') {
        // Remove 'edit' action
        unset($actions['edit']);
        // Remove 'quick edit' action
        unset($actions['inline hide-if-no-js']);
        // Remove 'trash' action
        unset($actions['trash']);
    }
    return $actions;
}

// Hook into the post row actions filter for both posts and pages
add_filter('post_row_actions', 'remove_edit_quick_edit_actions', 10, 2);
add_filter('page_row_actions', 'remove_edit_quick_edit_actions', 10, 2);

function remove_bulk_actions($bulk_actions)
{
    // Check if we are on the edit screen for the 'notifications' post type
    $screen = get_current_screen();
    if ($screen->post_type === 'notifications') {
        // Return an empty array to remove all bulk actions
        return array();
    }
    return $bulk_actions;
}

// Hook into the bulk actions filter for the specific post type
add_filter('bulk_actions-edit-notifications', 'remove_bulk_actions');

// In app  notification on user login
function notify_on_user_login($user_login, $user)
{
    if (!in_array('administrator', (array) $user->roles)) {
        create_notification(
            'User Logged In',
            'User "' . $user_login . '" has logged into RMS Portal.',
            array(
                'meta_input' => array(
                    'user_id' => $user->ID,
                    'action' => 'login_in',
                )
            )
        );
    }
}

add_action('wp_login', 'notify_on_user_login', 10, 2);

//adding padding in contract list page--Bhaskara 20/01/2025
// function add_custom_order_list_styles() {
//     global $pagenow;
//     if ( $pagenow == 'edit.php' && isset($_GET['post_type']) && $_GET['post_type'] == 'shop_order' ) {
//         echo '<style>
//             .order_number .order-preview {
//                 margin-right: 15px !important;
//                 padding-right: 15px !important;
//                 border-right: 1px solid #e5e5e5;
//             }
//             .order_number .order-view {
//                 margin-left: 15px !important;
//             }
//         </style>';
//     }
// }
// add_action('admin_head', 'add_custom_order_list_styles');


// change date format of date column in product listing page
add_filter('post_date_column_time', 'custom_date_format_with_time_in_products', 10, 2);

function custom_date_format_with_time_in_products($h_time, $post)
{
    if (is_admin() && get_post_type($post) === 'product') {

        $custom_date_format = 'd-m-Y \a\t H:i';
        return date_i18n($custom_date_format, strtotime($post->post_date));
    }
    return $h_time;
}


// All roles except customer role will not login through login by mobile using customer portal
function restrict_validate_otp_login()
{
    if (isset($_POST['action']) && $_POST['action'] === 'validate_otp_login') {

        $user_phone = isset($_POST['user_phone']) ? sanitize_text_field($_POST['user_phone']) : '';

        if (!$user_phone) {
            wp_send_json_error(__('Phone number is required.', 'textdomain'));
            wp_die();
        }

        $user_query = new WP_User_Query([
            'meta_key' => 'user_phone',
            'meta_value' => $user_phone,
            'number' => 1
        ]);

        $users = $user_query->get_results();

        if (!empty($users)) {
            $user = $users[0];
            $restricted_roles = ['central_administrator', 'rue_manager', 'sales_representative', 'operation_representative', 'commercial_representative', 'operator'];

            // Check if the user has a restricted role
            if (array_intersect($restricted_roles, (array) $user->roles)) {
                wp_send_json_error(__('You are not allowed to login through the customer portal.'));
                wp_die();
            }

            // Log in the user if they are not restricted
            wp_set_current_user($user->ID);
            wp_set_auth_cookie($user->ID);

            wp_send_json_success(__('Login successful.'));
            wp_die();
        } else {
            wp_send_json_error(__('User not found.'));
            wp_die();
        }
    }
}
add_action('wp_ajax_nopriv_validate_otp_login', 'restrict_validate_otp_login');
add_action('wp_ajax_validate_otp_login', 'restrict_validate_otp_login');

// JavaScript to handle the button click and make an AJAX request
add_action('wp_footer', function () {
    ?>
    <script>
        jQuery(document).ready(function ($) {
            $('#validateotpbtn').on('click', function (e) {
                e.preventDefault();

                var userPhone = $('#user_phone_otp').val();

                $.ajax({
                    url: '<?php echo admin_url('admin-ajax.php'); ?>',
                    method: 'POST',
                    data: {
                        action: 'validate_otp_login',
                        user_phone: userPhone
                    },
                    success: function (response) {
                        if (response.success) {
                            alert(response.data);
                            window.location.reload(); // Reload the page after successful login
                        } else {
                            alert(response.data);
                        }
                    },
                    error: function () {
                        alert('<?php echo esc_js(__('An error occurred. Please try again.')); ?>');
                    }
                });
            });
        });
    </script>
    <?php
});

add_action('admin_head', 'remove_payment_page_text_from_order_edit');

function remove_payment_page_text_from_order_edit()
{
    global $pagenow;

    // Check if we're on the WooCommerce order edit page
    if ('post.php' === $pagenow && isset($_GET['post']) && 'shop_order' === get_post_type($_GET['post'])) {

        echo '<style>
            #order_data .order_data_column .wc-order-status label a { display: none !important; }
        </style>';
    }
}

// removal of toolbar for all roles
if (!current_user_can('administrator') && !is_admin()) {
    add_filter('show_admin_bar', '__return_false');
}

add_filter('manage_shop_order_posts_custom_column', function ($column, $post_id) {
    if ($column === 'order_date') {
        $order = wc_get_order($post_id);
        if ($order) {
            echo date("d-m-Y", strtotime($order->get_date_created()));
        }
    }
}, 10, 2);
add_action('admin_head', function () {
    echo '<style> .column-order_date time { display: none !important; } </style>';
});

// Hide Application Password Section -- Bhaskara 05/02/2025

function hide_application_password_section()
{
    $screen = get_current_screen();
    if ($screen && in_array($screen->id, ['profile', 'user-edit'], true)) {

        ?>
        <style type="text/css">
            /* Hide application passwords section with high specificity */
            #application-passwords-section,
            .application-passwords-section {
                display: none !important;
                visibility: hidden !important;
                height: 0 !important;
                overflow: hidden !important;
                padding: 0 !important;
                margin: 0 !important;
            }
        </style>
        <script type="text/javascript">
            jQuery(document).ready(function ($) {
                function hideAppPass() {
                    // Remove the section completely from DOM
                    $('#application-passwords-section').remove();
                    $('.application-passwords-section').remove();
                }

                // Run on page load
                hideAppPass();

                // Monitor DOM changes for dynamically added content
                const observer = new MutationObserver(function (mutations) {
                    mutations.forEach(function (mutation) {
                        if (mutation.addedNodes.length) {
                            hideAppPass();
                        }
                    });
                });

                // Start observing the document body for DOM changes
                observer.observe(document.body, {
                    childList: true,
                    subtree: true
                });
            });
        </script>
        <?php
    }
}
add_action('admin_head', 'hide_application_password_section');

//--- end-- 

function add_notification_endpoint()
{
    add_rewrite_endpoint('notification', EP_ROOT | EP_PAGES);
}
add_action('init', 'add_notification_endpoint');

// 2. Add "notification" to WooCommerce query vars
function th_add_notification_query_vars($vars)
{
    $vars[] = 'notification';
    return $vars;
}
add_filter('query_vars', 'th_add_notification_query_vars', 0);

// 3. Add "Notification" to the My Account menu
function add_notification_menu_item_my_account($items)
{
    $items['notification'] = __('Notification', 'woocommerce');
    return $items;
}
add_filter('woocommerce_account_menu_items', 'add_notification_menu_item_my_account');

// 4. Display content on the "notification" page
function custom_notification_content()
{

}
add_action('woocommerce_account_notification_endpoint', 'custom_notification_content');

// 5. Flush rewrite rules when activating the theme
function custom_flush_rewrite_rules()
{
    add_notification_endpoint();
    flush_rewrite_rules();
}
register_activation_hook(__FILE__, 'custom_flush_rewrite_rules');

// Customer Portal - Password Reset Allowed to Customers Only
function restrict_selected_roles_forgot_password($allow, $user_id)
{
    $user = get_userdata($user_id);
    $restricted_roles = array('central_administrator', 'rue_manager', 'commercial_representative', 'operator', 'operation_representative', 'sales_representative');

    if (array_intersect($restricted_roles, (array) $user->roles)) {
        return false;
    }
    return $allow;
}
add_filter('allow_password_reset', 'restrict_selected_roles_forgot_password', 10, 2);

// user serch working based on all user not pagination wise (Shejad)
function modify_user_search_query($query)
{
    if (is_admin() && isset($_GET['s']) && !empty($_GET['s'])) {
        // If searching, show all users instead of paginating
        $query->query_vars['number'] = 999999; // A very high number to fetch all users
    }
}
add_action('pre_get_users', 'modify_user_search_query');

// hide Order action Drop down

add_action('admin_head', 'hide_specific_order_actions');

function hide_specific_order_actions()
{
    // Only run on order edit page
    $screen = get_current_screen();
    if (!$screen || $screen->id !== 'shop_order') {
        return;
    }
    ?>
    <style type="text/css">
        /* Hide the select dropdown */
        .order_actions li#actions select {
            display: none !important;
        }

        /* Hide the action button */
        .order_actions li#actions .button {
            display: none !important;
        }

        /* Optional: Hide the entire actions li if it looks empty */
        .order_actions li#actions {
            display: none !important;
        }
    </style>
    <?php
}
//--end--

//Cart Related Code--Bhaskara--07/03/2025
function custom_add_to_cart()
{
    $product_id = intval($_POST['product_id']);
    $start_date = sanitize_text_field($_POST['start_date']);
    $end_date = sanitize_text_field($_POST['end_date']);
    $shift = intval($_POST['shift']);
    $location = sanitize_text_field($_POST['location']);
    $application = sanitize_text_field($_POST['application']);

    $product = wc_get_product($product_id);
    $base_price = $product->get_price();
    $start_date_obj = new DateTime($start_date);
    $end_date_obj = new DateTime($end_date);
    $days = $start_date_obj->diff($end_date_obj)->days + 1; // Include end date
    $hours_per_day = 8;
    $total_hours = $days * $shift * $hours_per_day;
    $calculated_price = ($total_hours / 8) * $base_price;
    //$day_price = $calculated_price / $days;
    $cart_item_data = [
        'rfq_data' => [
            'start_date' => date('d-m-Y', strtotime($start_date)),
            'end_date' => date('d-m-Y', strtotime($end_date)),
            'shift' => $shift,
            'location' => $location,
            'application' => $application,
            'base_price' => $base_price,
            'calculated_price' => $calculated_price
        ]
    ];

    $cart_item_key = WC()->cart->add_to_cart($product_id, 1, 0, [], $cart_item_data);

    if ($cart_item_key) {
        wp_send_json_success();
    } else {
        wp_send_json_error();
    }
}
add_action('wp_ajax_custom_add_to_cart', 'custom_add_to_cart');
add_action('wp_ajax_nopriv_custom_add_to_cart', 'custom_add_to_cart');

// column 
add_filter('woocommerce_get_item_data', 'add_custom_cart_item_details', 10, 2);
function add_custom_cart_item_details($item_data, $cart_item)
{

    // Check if custom RFQ data exists
    if (isset($cart_item['rfq_data'])) {
        $rfq_data = $cart_item['rfq_data'];

        // Add each detail as a separate item data entry
        $item_data[] = [
            'key' => 'Start Date',
            'value' => $rfq_data['start_date']
        ];
        $item_data[] = [
            'key' => 'End Date',
            'value' => $rfq_data['end_date']
        ];
        $item_data[] = [
            'key' => 'Shifts',
            'value' => $rfq_data['shift']
        ];
        $item_data[] = [
            'key' => 'Location',
            'value' => $rfq_data['location']
        ];
        $item_data[] = [
            'key' => 'Application',
            'value' => $rfq_data['application']
        ];
        $item_data[] = [
            'key' => 'Base Price for 8HR',
            'value' => format_indian_price($rfq_data['base_price'])
        ];
        $item_data[] = [
            'key' => 'Calculated Price',
            'value' => format_indian_price($rfq_data['calculated_price'])
        ];
    }

    return $item_data;
}


// Optional: Add custom styles for the item data
add_action('wp_head', 'add_custom_cart_item_data_styles');
function add_custom_cart_item_data_styles()
{
    ?>
    <style>
        .woocommerce-cart-form .variation-data {
            margin-top: 10px;
            background-color: #f9f9f9;
            padding: 10px;
            border: 1px solid #e0e0e0;
        }

        .woocommerce-cart-form .variation-data dt {
            font-weight: bold;
            margin-right: 10px;
            display: inline-block;
            width: 120px;
        }

        .woocommerce-cart-form .variation-data dd {
            display: inline-block;
            margin-left: 0;
        }

        .wc-block-components-product-details.wc-block-components-product-details:last-of-type {
            margin-bottom: 0;
            color: black;
            font-weight: 800;
        }
    </style>
    <?php
}

// // Display RFQ price in cart
// add_filter('woocommerce_cart_item_price', 'display_rfq_price_in_cart', 10, 3);
// function display_rfq_price_in_cart($price, $cart_item, $cart_item_key) {
//     if (isset($cart_item['rfq_data']['calculated_price'])) {
//         return wc_price($cart_item['rfq_data']['calculated_price']);
//     }
//     return $price;
// }

// Update cart totals with RFQ price
// add_action('woocommerce_before_calculate_totals', 'update_cart_with_rfq_price', 10, 1);
// function update_cart_with_rfq_price($cart) {
//     if (is_admin() && !defined('DOING_AJAX')) return;

//     foreach ($cart->get_cart() as $cart_item) {
//         if (isset($cart_item['rfq_data']['calculated_price'])) {
//             $cart_item['data']->set_price($cart_item['rfq_data']['calculated_price']);
//         }
//     }
// }


/**
 * Update request_quote table after successful order creation
 * Add this code to your theme's functions.php or a custom plugin
 */

// Hook into WooCommerce order creation 
// woocommerce_checkout_create_order
//add_action('woocommerce_checkout_order_processed', 'update_request_quote_after_order', 10, 1);
// add_action('woocommerce_order_status_processing', 'update_request_quote_after_order', 20, 1);

// function update_request_quote_after_order($order_id) {
//     global $wpdb;

//     // Get the order object
//     $order = wc_get_order($order_id);

//     // Get customer ID
//     $customer_id = $order->get_customer_id();

//     if (empty($customer_id)) {
//         error_log("No customer ID for Order #$order_id - skipping update");
//         return; // Stop execution for guest users
//     }

//     // Loop through each order item
//     foreach ($order->get_items() as $item) {
//         $product_id = $item->get_product_id();
//         $item_total = floatval($item->get_total()); // Get this specific line item's total

//         // Update only the latest row in descending order with limit 1
//         $query = $wpdb->prepare(
//             "UPDATE {$wpdb->prefix}request_quote 
//             SET order_id = %d 
//             WHERE user_id = %d 
//             AND product_id = %d 
//             AND CAST(calculated_price AS DECIMAL(10,2)) = %f
//             ORDER BY id DESC LIMIT 1",
//             $order_id,
//             $customer_id,
//             $product_id,
//             $item_total
//         );

//         $result = $wpdb->query($query);

//         // Success Log
//         if ($wpdb->rows_affected > 0) {
//             error_log("Updated Order #$order_id | User: $customer_id | Product: $product_id | Price: $item_total");
//         } else {
//             error_log("No Update for Order #$order_id | User: $customer_id | Product: $product_id | Price: $item_total | SQL: " . $query);
//         }

//         // Optional SQL Error Log
//         if ($wpdb->last_error) {
//             error_log("SQL Error: " . $wpdb->last_error);
//         }
//     }
//     // Add this after your foreach loop
// $table_name = $wpdb->prefix . 'request_quote';
// $result = $wpdb->get_row("SELECT * FROM $table_name WHERE order_id = $order_id", ARRAY_A);

// // Check if we have results
// if ($result) {
//     $rental_amount = $result['calculated_price'];
//     $start_date = $result['start_date'];
//     $end_date = $result['end_date'];
//     $shift = $result['shift'];
//     $model_name = $result['product_name'];


//     update_post_meta($order_id, 'rental_amount', $rental_amount);
//     update_post_meta($order_id, 'start_date', $start_date); 
//     update_post_meta($order_id, 'end_date', $end_date); 
//     update_post_meta($order_id, '_number_shifts_required', $shift);
//     update_post_meta($order_id, 'model_name', $model_name);
//     update_post_meta($order_id, '_order_total');



//     error_log("Updated post meta for Order #$order_id");
// } else {
//     error_log("No request_quote record found for Order #$order_id");
// }
// }

//---end----

//--- Checkout Page Customisation --- Aseema - 07/03/2025

add_action('wp_enqueue_scripts', 'custom_checkout_script');
function custom_checkout_script()
{
    if (is_checkout()) {
        wp_enqueue_script('custom-checkout', get_stylesheet_directory_uri() . '/custom-checkout.js', array('jquery'), null, true);
    }
}

// Cart Count--08-03-2025
function woo_cart_count_shortcode()
{
    $count = WC()->cart->get_cart_contents_count();
    return '<span id="cart_icon cart-count">' . $count . '</span>';

}
add_shortcode('cart_count', 'woo_cart_count_shortcode');
//-----end----

// Product list page horizontally scrollable-- Bhaskara -- 10-3-2024
function custom_admin_product_list_scroll()
{
    echo '<style>
        /* Make WooCommerce product list horizontally scrollable */
        .wp-list-table.widefat {
            display: block;
            overflow-x: auto;
            white-space: nowrap;
        }

        /* Prevent breaking of text in table cells */
        .wp-list-table.widefat th,
        .wp-list-table.widefat td, {
            min-width: auto; /* Adjust based on column width */
        }
            
    </style>';
}
add_action('admin_head', 'custom_admin_product_list_scroll');
//----end----
// data from woocommerce order to rental fleet management(rental contracts)
function update_contract_with_product_data($item_id, $item, $order_id)
{
    global $wpdb;

    error_log("🔄 Updating contract with product details for Order ID: $order_id, Item ID: $item_id");

    // Fetch product ID from order item meta
    $product_id = $wpdb->get_var($wpdb->prepare(
        "SELECT meta_value 
         FROM {$wpdb->prefix}woocommerce_order_itemmeta 
         WHERE order_item_id = %d 
         AND meta_key = '_product_id'
         LIMIT 1",
        $item_id
    ));

    if (!$product_id) {
        error_log("❌ No product ID found for Item ID: $item_id.");
        return;
    }



    // Fetch required meta values
    $meta_keys = ['equipment_number', 'model_number', 'equipment_serial_number', 'st3st5_field'];
    $meta_values = [];

    foreach ($meta_keys as $key) {
        $meta_values[$key] = $wpdb->get_var($wpdb->prepare(
            "SELECT meta_value 
             FROM {$wpdb->prefix}postmeta 
             WHERE post_id = %d 
             AND meta_key = %s 
             LIMIT 1",
            $product_id,
            $key
        )) ?: ''; // Default to empty string if not found
    }

    error_log("✅ Product ID: $product_id | Equipment Number: {$meta_values['equipment_number']} | Model Number: {$meta_values['model_number']} | Equipment Serial No: {$meta_values['equipment_serial_number']}");

    // Update contracts table
    $contracts_table = $wpdb->prefix . 'contracts';
    $updated = $wpdb->update(
        $contracts_table,
        array(
            'product_id' => $product_id,
            'equipment_number' => $meta_values['equipment_number'],
            'equipment_model_no' => $meta_values['model_number'],
            'equipment_serial_no' => $meta_values['equipment_serial_number'],
            'st3st5_field' => $meta_values['st3st5_field']
        ),
        array('rms_contract_id' => $order_id),
        array('%d', '%s', '%s', '%s', '%s'),
        array('%d')
    );

    if ($updated === false) {
        error_log("⚠️ Failed to update contract for Order ID: $order_id.");
    } else {
        error_log("✅ Successfully updated contract for Order ID: $order_id.");
    }
}

// Hook: When a new order item is added
add_action('woocommerce_new_order_item', 'update_contract_with_product_data', 10, 3);


function sync_contract_with_product_meta($meta_id, $post_id, $meta_key, $_meta_value)
{
    global $wpdb;

    // List of relevant meta keys
    $tracked_keys = ['equipment_number', 'model_number', 'equipment_serial_number', 'st3st5_field'];

    if (!in_array($meta_key, $tracked_keys)) {
        return; // Ignore other meta updates
    }

    error_log("🔄 Meta key updated: $meta_key for Product ID: $post_id");

    // Fetch order_id from contracts table using product_id
    $contract = $wpdb->get_row($wpdb->prepare(
        "SELECT rms_contract_id FROM {$wpdb->prefix}contracts WHERE product_id = %d LIMIT 1",
        $post_id
    ));

    if (!$contract) {
        error_log("❌ No contract found for Product ID: $post_id.");
        return;
    }

    $order_id = $contract->rms_contract_id;

    // Fetch updated meta values
    $meta_values = [];
    foreach ($tracked_keys as $key) {
        $meta_values[$key] = $wpdb->get_var($wpdb->prepare(
            "SELECT meta_value FROM {$wpdb->prefix}postmeta WHERE post_id = %d AND meta_key = %s LIMIT 1",
            $post_id,
            $key
        )) ?: '';
    }

    // Update contracts table
    $contracts_table = $wpdb->prefix . 'contracts';
    $updated = $wpdb->update(
        $contracts_table,
        array(
            'equipment_number' => $meta_values['equipment_number'],
            'equipment_model_no' => $meta_values['model_number'],
            'equipment_serial_no' => $meta_values['equipment_serial_number'],
            'st3st5_field' => $meta_values['st3st5_field'],
        ),
        array('rms_contract_id' => $order_id),
        array('%s', '%s', '%s', '%s'),
        array('%d')
    );

    if ($updated === false) {
        error_log("⚠️ Failed to update contract for Order ID: $order_id.");
    } else {
        error_log("✅ Contract updated for Order ID: $order_id.");
    }
}

// Hook: When meta values change
add_action('updated_post_meta', 'sync_contract_with_product_meta', 10, 4);

// Display banner on product based on purpose-of-listing attribute

function add_product_banner_based_on_attribute()
{
    global $product;

    // Check if we're on a single product page and product exists
    if (!is_product() || !$product) {
        return;
    }

    // Get the 'purpose-of-listing' attribute value
    $purpose = $product->get_attribute('purpose-of-listing');

    // If no attribute value, exit
    if (empty($purpose)) {
        return;
    }

    // Determine the banner text based on purpose value
    $banner_text = '';
    $banner_class = '';

    if (strpos(strtolower($purpose), 'model') !== false) {
        $banner_text = 'New Equipment';
        $banner_class = 'new-eq-banner';
    }
    // elseif (strpos(strtolower($purpose), 'renting') !== false) {
    //     $banner_text = 'Available';
    //     $banner_class = 'available-banner';
    // }

    // If we have banner text, output the HTML
    if (!empty($banner_text)) {
        echo '<div class="product-banner ' . esc_attr($banner_class) . '" style="
            position: absolute;
            top: 3px;
            left: 3px;
            padding: 1px 6px;
            color: #000;
            font-weight: bold;
            z-index: 10;
            font-size: 14px;
            background-color: #ffbd2b;">
            ' . esc_html($banner_text) . '
        </div>
        <style>
         .available-banner {
            background-color: #2196F3; 
        } 
        .new-eq-banner {
            background-color: #ffbd2b;
        }
        </style>';
    }
}

// Hook into WooCommerce template
add_action('woocommerce_before_single_product_summary', 'add_product_banner_based_on_attribute', 5);

function add_product_banner_on_archive()
{
    global $product;

    // Check if product exists
    if (!$product) {
        return;
    }

    // Get the 'purpose-of-listing' attribute value
    $purpose = $product->get_attribute('purpose-of-listing');

    // If no attribute value, exit
    if (empty($purpose)) {
        return;
    }

    // Determine the banner text based on purpose value
    $banner_text = '';
    $banner_class = '';

    if (strpos(strtolower($purpose), 'model') !== false) {
        $banner_text = 'New Equipment';
        $banner_class = 'new-eq-banner';
    }
    // elseif (strpos(strtolower($purpose), 'renting') !== false) {
    //     $banner_text = 'Available';
    //     $banner_class = 'available-banner';
    // }

    // If we have banner text, output the HTML
    if (!empty($banner_text)) {
        echo '<div class="product-banner ' . esc_attr($banner_class) . '" style="
            position: absolute;
            top: 3px;
            left: 3px;
            padding: 1px 6px;
            color: #000;
            font-weight: bold;
            z-index: 10;
            font-size: 14px;
            ' . ($banner_class == 'new-eq-banner' ? 'background-color: #ffbd2b;' : 'background-color: #2196F3;') . '">
            ' . esc_html($banner_text) . '
        </div>
        <style>
         .available-banner {
            background-color: #2196F3; 
        } 
        .new-eq-banner {
            background-color: #ffbd2b;
        }
        </style>';
    }
}

add_action('woocommerce_before_shop_loop_item_title', 'add_product_banner_on_archive', 5);

//------BHaskara-24-03-2025-------------/
// // Remove shipping calculator from cart page
// add_filter('woocommerce_cart_shipping_method_full_label', 'remove_shipping_label', 10, 2);
// function remove_shipping_label($label, $method) {
//     $new_label = preg_replace('/^.+:/', '', $label);
//     return $new_label;
// }

// // Remove shipping info from cart totals
// add_filter('woocommerce_cart_totals_before_shipping', 'remove_cart_totals_shipping_html');
// add_filter('woocommerce_cart_totals_after_shipping', 'remove_cart_totals_shipping_html');
// function remove_cart_totals_shipping_html() {
//     ob_start();
//     return;
// }

// // Hide shipping calculator on cart page
// add_filter('woocommerce_shipping_calculator_enable_button', '__return_false');

// // Hide shipping fields on checkout page but keep functionality
// add_filter('woocommerce_shipping_fields', 'custom_override_shipping_fields');
// function custom_override_shipping_fields($fields) {
//     foreach ($fields as $key => $field) {
//         $fields[$key]['class'][] = 'hidden-field';
//     }
//     return $fields;
// }

// Remove shipping row from order details table
add_filter('woocommerce_get_order_item_totals', 'remove_shipping_from_order_details', 10, 2);
function remove_shipping_from_order_details($total_rows, $order)
{
    // Remove the shipping method row
    if (isset($total_rows['shipping'])) {
        unset($total_rows['shipping']);
    }
    return $total_rows;
}

// remove Shipping method from existing orders in admin display
add_filter('woocommerce_order_get_items', 'filter_order_items_admin', 10, 3);
function filter_order_items_admin($items, $order, $types)
{
    // Only modify in admin area
    if (is_admin()) {
        foreach ($items as $item_id => $item) {
            if ($item->is_type('shipping')) {
                $shipping_cost = $item->get_total();
                if ($shipping_cost == 0) {
                    unset($items[$item_id]);
                }
            }
        }
    }
    return $items;
}
add_filter('woocommerce_cart_needs_shipping_address', '__return_true');
add_filter('woocommerce_shipping_calculator_enable_postcode', '__return_true');
add_filter('woocommerce_shipping_calculator_enable_city', '__return_true');
add_filter('woocommerce_shipping_calculator_enable_state', '__return_true');
add_filter('woocommerce_no_shipping_available_html', '__return_empty_string');
add_filter('woocommerce_cart_no_shipping_available_html', '__return_empty_string');

add_action('woocommerce_checkout_update_order_meta', function ($order_id) {
    $order = wc_get_order($order_id);
    // Check if shipping address is empty
    if (empty($order->get_shipping_address_1())) {
        // Get shipping fields from posted checkout data
        $shipping_address = array(
            'first_name' => isset($_POST['shipping_first_name']) ? sanitize_text_field($_POST['shipping_first_name']) : '',
            'last_name' => isset($_POST['shipping_last_name']) ? sanitize_text_field($_POST['shipping_last_name']) : '',
            'company' => isset($_POST['shipping_company']) ? sanitize_text_field($_POST['shipping_company']) : '',
            'address_1' => isset($_POST['shipping_address_1']) ? sanitize_text_field($_POST['shipping_address_1']) : '',
            'address_2' => isset($_POST['shipping_address_2']) ? sanitize_text_field($_POST['shipping_address_2']) : '',
            'city' => isset($_POST['shipping_city']) ? sanitize_text_field($_POST['shipping_city']) : '',
            'state' => isset($_POST['shipping_state']) ? sanitize_text_field($_POST['shipping_state']) : '',
            'postcode' => isset($_POST['shipping_postcode']) ? sanitize_text_field($_POST['shipping_postcode']) : '',
            'country' => isset($_POST['shipping_country']) ? sanitize_text_field($_POST['shipping_country']) : '',
        );

        // Set and save shipping address manually
        $order->set_shipping_first_name($shipping_address['first_name']);
        $order->set_shipping_last_name($shipping_address['last_name']);
        $order->set_shipping_company($shipping_address['company']);
        $order->set_shipping_address_1($shipping_address['address_1']);
        $order->set_shipping_address_2($shipping_address['address_2']);
        $order->set_shipping_city($shipping_address['city']);
        $order->set_shipping_state($shipping_address['state']);
        $order->set_shipping_postcode($shipping_address['postcode']);
        $order->set_shipping_country($shipping_address['country']);

        // Save the updated order details
        $order->save();
    }
});

// add_filter('woocommerce_order_get_formatted_shipping_address', function($address, $order) {
//     // Only apply this on the Thank You page
//     if (is_wc_endpoint_url('order-received')) {
//         if (!empty($order->get_shipping_address_1())) {
//             return WC()->countries->get_formatted_address(array(
//                 'first_name' => $order->get_shipping_first_name(),
//                 'last_name'  => $order->get_shipping_last_name(),
//                 'company'    => $order->get_shipping_company(),
//                 'address_1'  => $order->get_shipping_address_1(),
//                 'address_2'  => $order->get_shipping_address_2(),
//                 'city'       => $order->get_shipping_city(),
//                 'state'      => $order->get_shipping_state(),
//                 'postcode'   => $order->get_shipping_postcode(),
//                 'country'    => $order->get_shipping_country(),
//             ));
//         }
//     }
//     return $address;
// }, 10, 2);



// ---------------Price Format--Bhaskara---24/03/2025--------------------
// Core function to format price in Indian style
function format_indian_price($price, $decimals = 2, $decimal_separator = '.')
{
    $price = floatval($price);
    $whole = floor($price); // Integer part
    $decimal = round(($price - $whole) * pow(10, $decimals), $decimals); // Decimal part

    // Format the whole number in Indian style
    $indian_format = number_format($whole, 0, '', '');
    if ($whole >= 1000) {
        $last_three = substr($indian_format, -3);
        $rest = substr($indian_format, 0, -3);
        $rest = strrev(implode(',', str_split(strrev($rest), 2))); // Split every 2 digits after last 3
        $indian_format = $rest . ',' . $last_three;
    }

    // Add decimal if applicable
    if ($decimals > 0 && $decimal > 0) {
        $indian_format .= $decimal_separator . str_pad($decimal, $decimals, '0', STR_PAD_LEFT);
    }

    // Add currency symbol based on position
    $currency_symbol = get_woocommerce_currency_symbol();
    $currency_pos = get_option('woocommerce_currency_pos');
    switch ($currency_pos) {
        case 'left':
            return $currency_symbol . $indian_format;
        case 'right':
            return $indian_format . $currency_symbol;
        case 'left_space':
            return $currency_symbol . ' ' . $indian_format;
        case 'right_space':
            return $indian_format . ' ' . $currency_symbol;
        default:
            return $currency_symbol . $indian_format;
    }
}

// Adjust the base price format to avoid symbol duplication
add_filter('woocommerce_price_format', 'custom_woocommerce_price_format', 10, 2);
function custom_woocommerce_price_format($format, $currency_pos)
{
    return '%2$s'; // Only the price, symbol added in custom filter
}

// Apply Indian format to all WooCommerce prices
add_filter('formatted_woocommerce_price', 'custom_indian_price_format', 100, 5);
function custom_indian_price_format($formatted_price, $price, $decimals, $decimal_separator, $thousand_separator)
{
    return format_indian_price($price, $decimals, $decimal_separator);
}

// Display RFQ price in cart with Indian format
add_filter('woocommerce_cart_item_price', 'display_rfq_price_in_cart', 10, 3);
function display_rfq_price_in_cart($price, $cart_item, $cart_item_key)
{
    if (isset($cart_item['rfq_data']['calculated_price'])) {
        $calculated_price = $cart_item['rfq_data']['calculated_price'];
        return format_indian_price($calculated_price, wc_get_price_decimals(), wc_get_price_decimal_separator());
    }
    return $price;
}

// Update cart totals with RFQ price
add_action('woocommerce_before_calculate_totals', 'update_cart_with_rfq_price', 10, 1);
function update_cart_with_rfq_price($cart)
{
    if (is_admin() && !defined('DOING_AJAX'))
        return;

    foreach ($cart->get_cart() as $cart_item) {
        if (isset($cart_item['rfq_data']['calculated_price'])) {
            $cart_item['data']->set_price($cart_item['rfq_data']['calculated_price']);
        }
    }
}

// Target WooCommerce Blocks price rendering
add_filter('wc_price_args', 'custom_wc_price_args_for_blocks', 100);
function custom_wc_price_args_for_blocks($args)
{
    $args['price_format_callback'] = function ($price) use ($args) {
        return format_indian_price($price, $args['decimals'], $args['decimal_separator']);
    };
    $args['thousand_separator'] = ''; // Clear default separator
    return $args;
}

// Fix cart totals for WooCommerce Blocks
add_filter('woocommerce_blocks_cart_totals', 'custom_cart_totals_block_format', 100, 2);
function custom_cart_totals_block_format($cart_totals, $cart)
{
    $decimals = wc_get_price_decimals();
    $decimal_separator = wc_get_price_decimal_separator();

    // Format subtotal
    if (isset($cart_totals['subtotal'])) {
        $cart_totals['subtotal'] = format_indian_price($cart->get_subtotal(), $decimals, $decimal_separator);
    }

    // Format total
    if (isset($cart_totals['total_price'])) {
        $cart_totals['total_price'] = format_indian_price($cart->get_total('edit'), $decimals, $decimal_separator);
    }

    return $cart_totals;
}

// JavaScript fallback for cart page (WooCommerce Blocks)
add_action('wp_enqueue_scripts', 'enqueue_indian_price_format_script');
function enqueue_indian_price_format_script()
{
    if (is_cart()) {
        wc_enqueue_js("
            function formatIndianPrice(price) {
                let [whole, decimal] = price.toString().split('.');
                whole = whole.replace(/[^0-9]/g, ''); // Remove non-numeric chars (like ₹)
                let lastThree = whole.slice(-3);
                let rest = whole.slice(0, -3);
                if (rest) {
                    rest = rest.replace(/\B(?=(?:\d{2})+(?!\d))/g, ',');
                    return '₹' + rest + ',' + lastThree + (decimal ? '.' + decimal : '');
                }
                return '₹' + whole + (decimal ? '.' + decimal : '');
            }

            function updateCartPrices() {
                document.querySelectorAll('.wc-block-formatted-money-amount').forEach(function(element) {
                    let priceText = element.textContent.trim();
                    let priceNum = parseFloat(priceText.replace(/[^0-9.]/g, ''));
                    if (!isNaN(priceNum)) {
                        element.textContent = formatIndianPrice(priceNum);
                    }
                });
            }

            // Run on page load and after cart updates
            updateCartPrices();
            document.addEventListener('wc-blocks_cart_updated', updateCartPrices);
        ");
    }
}

// Optional: Adjust WooCommerce settings to avoid conflicts
add_filter('woocommerce_get_settings_general', 'custom_currency_settings');
function custom_currency_settings($settings)
{
    foreach ($settings as &$setting) {
        if ($setting['id'] == 'woocommerce_price_thousand_sep') {
            $setting['default'] = ''; // Empty to avoid interference
        }
        if ($setting['id'] == 'woocommerce_price_decimal_sep') {
            $setting['default'] = '.'; // Decimal separator
        }
        if ($setting['id'] == 'woocommerce_price_num_decimals') {
            $setting['default'] = 2; // Number of decimals
        }
    }
    return $settings;
}

//------Rename Invoice to Payment Receipt--Bhaskara--24/03/2025----
//Change the Payment Recipt Metabox title and button text PHP solution

// First part: Change the metabox title
function modify_invoice_metabox_title()
{
    global $wp_meta_boxes;

    $post_types = ['shop_order']; // You can add more post types if needed
    $contexts = ['normal', 'advanced', 'side'];
    $priorities = ['high', 'core', 'default', 'low'];

    foreach ($post_types as $post_type) {
        foreach ($contexts as $context) {
            foreach ($priorities as $priority) {
                if (isset($wp_meta_boxes[$post_type][$context][$priority]['woocommerce-packinglist-box'])) {
                    $wp_meta_boxes[$post_type][$context][$priority]['woocommerce-packinglist-box']['title'] = 'Payment Receipt';
                }
            }
        }
    }
}
add_action('add_meta_boxes', 'modify_invoice_metabox_title', 999);

// Second part: Change text inside the metabox using output buffering
function modify_invoice_text()
{
    global $post_type;

    if ($post_type !== 'shop_order') {
        return;
    }

    ob_start(function ($buffer) {
        // Replace "Invoice Number:" text
        $buffer = str_replace('Invoice Number:', 'Receipt Number:', $buffer);

        // Replace button text
        $buffer = str_replace('<div class="wt_pklist_btn_text">Invoice</div>', '<div class="wt_pklist_btn_text">Payment Receipt</div>', $buffer);

        // Replace tooltip text
        $buffer = str_replace('title="Download Invoice"', 'title="Download Payment Receipt"', $buffer);
        $buffer = str_replace('title="Print Invoice"', 'title="Print Payment Receipt"', $buffer);

        // Replace screen reader text
        $buffer = preg_replace('/<span class="screen-reader-text">(.*?)Invoice(.*?)<\/span>/', '<span class="screen-reader-text">$1Payment Receipt$2</span>', $buffer);

        // Replace hidden spans with descriptions
        $buffer = preg_replace('/<span class="hidden" id="(.*?)">.*?Invoice.*?<\/span>/', '<span class="hidden" id="$1">Move Payment Receipt box down</span>', $buffer);

        return $buffer;
    });
}
function end_invoice_text_modification()
{
    if (ob_get_level()) {
        ob_end_flush();
    }
}

add_action('admin_head-post.php', 'modify_invoice_text');
add_action('admin_footer', 'end_invoice_text_modification', 999);

function add_custom_invoice_text_script()
{
    global $pagenow, $post_type;

    // For order list page
    if ($pagenow == 'edit.php' && $post_type == 'shop_order') {
        ?>
        <script type="text/javascript">
            jQuery(document).ready(function ($) {
                // Change column header text from "Invoice" to "Payment Receipt"
                $('th#Invoice span:first').text('Receipt No');

                // Function to fix screen options text
                function updateScreenOptions() {
                    // Target the specific label by finding the input with value="Invoice"
                    $('input.hide-column-tog[value="Invoice"]').each(function () {
                        // Get the parent label
                        var $label = $(this).parent('label');

                        // Replace only the text node, not the entire HTML content
                        var labelText = $label.contents().filter(function () {
                            return this.nodeType === 3; // Text nodes only
                        }).last();

                        if (labelText.length > 0) {
                            labelText[0].nodeValue = 'Receipt No';
                        }
                    });
                }

                // Run immediately
                updateScreenOptions();

                // Also run when screen options are clicked
                $('#show-settings-link').on('click', function () {
                    // Use setTimeout to ensure the options are fully loaded
                    setTimeout(updateScreenOptions, 100);
                });

                // Add a mutation observer to catch dynamically loaded content
                var observer = new MutationObserver(function (mutations) {
                    updateScreenOptions();
                });

                // Start observing the screen options area
                var screenOptionsWrap = document.getElementById('screen-options-wrap');
                if (screenOptionsWrap) {
                    observer.observe(screenOptionsWrap, {
                        childList: true,
                        subtree: true
                    });
                }
            });
        </script>
        <?php
    }

    // For single order edit page (unchanged)
    if ($pagenow == 'post.php' && $post_type == 'shop_order') {
        ?>
        <script type="text/javascript">
            jQuery(document).ready(function ($) {
                // Change the metabox title
                $('#woocommerce-packinglist-box h2.hndle').text('Payment Receipt');

                // Change the button text from "Invoice" to "Payment Receipt"
                $('.wt_pklist_btn_text').text('Payment Receipt');

                // Change "Invoice Number:" text to "Receipt Number:"
                $('#woocommerce-packinglist-box td').each(function () {
                    var text = $(this).html();
                    if (text.includes('Invoice Number:')) {
                        $(this).html(text.replace('Invoice Number:', 'Receipt Number:'));
                    }
                });

                // Change the tooltips for consistency
                $('a[title="Download Invoice"]').attr('title', 'Download Payment Receipt');
                $('a[title="Print Invoice"]').attr('title', 'Print Payment Receipt');

                // If the text appears in screen reader text, update that too
                $('.screen-reader-text:contains("Invoice")').each(function () {
                    var text = $(this).text();
                    $(this).text(text.replace('Invoice', 'Payment Receipt'));
                });

                // Update any hidden spans with Invoice descriptions
                $('span.hidden:contains("Invoice")').each(function () {
                    var text = $(this).text();
                    $(this).text(text.replace('Invoice', 'Payment Receipt'));
                });
            });
        </script>
        <?php
    }
}
add_action('admin_footer', 'add_custom_invoice_text_script');

// billing phone should not accept varchar and should not more than 10 length --Aseema

add_filter('woocommerce_checkout_fields', 'custom_checkout_phone_number_type');
function custom_checkout_phone_number_type($fields)
{
    $fields['billing']['billing_phone']['type'] = 'number';
    $fields['billing']['billing_phone']['custom_attributes'] = array(
        'inputmode' => 'numeric',
        'maxlength' => '10',
        'min' => '0',
        'oninput' => "this.value = this.value.replace(/[^0-9]/g, '');"
    );
    return $fields;
}
add_action('woocommerce_checkout_process', 'validate_billing_phone');
function validate_billing_phone()
{
    if (!isset($_POST['billing_phone']) || !preg_match('/^\d{10}$/', $_POST['billing_phone'])) {
        wc_add_notice(__('Please enter a valid 10-digit phone number.'), 'error');
    }
}


//////////////////////////////// TP CODE
// function my_custom_insert_products_on_admin_products_page()
// {
//     global $pagenow, $typenow;

//     if (is_admin() && $pagenow === 'edit.php' && $typenow === 'product') {

//         // Define your products
//         $products = [
//             ['title' => 'Product Alpha', 'equipment_number' => 'EQ1001'],
//             ['title' => 'Product heyaa', 'equipment_number' => 'EQ1006'],
//             ['title' => 'Product Tesla', 'equipment_number' => 'EQ1004'],
//             ['title' => 'Product new', 'equipment_number' => 'EQ1009'],
//         ];

//         foreach ($products as $prod) {
//             // Check if a product with this equipment_number already exists
//             $existing = get_posts([
//                 'post_type' => 'product',
//                 'post_status' => ['draft', 'publish', 'pending', 'private'],
//                 'meta_query' => [
//                     [
//                         'key' => 'equipment_number',
//                         'value' => $prod['equipment_number'],
//                         'compare' => '='
//                     ]
//                 ],
//                 'fields' => 'ids',
//                 'posts_per_page' => 1
//             ]);

//             if (empty($existing)) {
//                 $post_id = wp_insert_post([
//                     'post_title'  => $prod['title'],
//                     'post_type'   => 'product',
//                     'post_status' => 'draft',
//                 ]);

//                 if (!is_wp_error($post_id)) {
//                     update_field('equipment_number', $prod['equipment_number'], $post_id);
//                 }
//             }
//         }
//     }
// }
// add_action('admin_init', 'my_custom_insert_products_on_admin_products_page');

////////////////////////////TP CODE

function my_custom_script()
{
    wp_enqueue_script('registered-script', get_stylesheet_directory_uri() . '/js/custom-js.js', array('jquery'), '1.0', true);
}
add_action('wp_enqueue_scripts', 'my_custom_script');

function custom_products_exclude_buy_with_pagination($atts)
{
    $atts = shortcode_atts(array(
        'posts_per_page' => 12, // number of products per page
        'orderby' => 'meta_value_num',
        'order' => 'ASC',
        'excluded_slug' => 'buy', // category slug to exclude
    ), $atts, 'products_excluding_buy');

    // Get excluded category ID
    $excluded_cat = get_term_by('slug', $atts['excluded_slug'], 'product_cat');
    if (!$excluded_cat)
        return 'Category not found.';

    // Get current page
    $paged = max(1, get_query_var('paged') ? get_query_var('paged') : get_query_var('page'));

    $args = array(
        'post_type' => 'product',
        'posts_per_page' => $atts['posts_per_page'],
        'orderby' => $atts['orderby'],
        'order' => $atts['order'],
        'paged' => $paged,
        'meta_key' => '_price',
        'tax_query' => array(
            array(
                'taxonomy' => 'product_cat',
                'field' => 'term_id',
                'terms' => array($excluded_cat->term_id),
                'operator' => 'NOT IN'
            )
        )
    );

    $query = new WP_Query($args);
    ob_start();

    if ($query->have_posts()) {
        echo '<ul class="products">';
        while ($query->have_posts()) {
            $query->the_post();
            wc_get_template_part('content', 'product');
        }
        echo '</ul>';

        // Pagination
        $big = 999999999; // need an unlikely integer
        echo '<div class="custom-pagination">';
        echo paginate_links(array(
            'base' => str_replace($big, '%#%', esc_url(get_pagenum_link($big))),
            'format' => '?paged=%#%',
            'current' => max(1, $paged),
            'total' => $query->max_num_pages,
            'prev_text' => '&laquo;',
            'next_text' => '&raquo;',
            'type' => 'list',
        ));
        echo '</div>';

    } else {
        echo 'No products found.';
    }

    wp_reset_postdata();
    return ob_get_clean();
}
add_shortcode('products_excluding_buy', 'custom_products_exclude_buy_with_pagination');




function rent_buy_interface()
{
    ob_start(); // Start output buffering
    ?>
    <div class="rent-buy-options bg-white p-4 shadow" style="max-width: 500px; width: 100%; border-radius: 16px;">
        <!-- Heading & Button Group -->
        <div id="intro-section">
            <h3 class="mb-4" style="font-size: 24px; font-weight: 600;">
                Choose your preference to explore the best options tailored for you!
            </h3>
            <div class="d-flex justify-content-center">
                <button id="rent-button" type="button" class="btn mr-2"
                    style="background: #b22222; color: white; font-weight: 600;">
                    I want to rent 🏗️
                </button>
                <button id="buy-button" type="button" class="btn"
                    style="background: #1a1a1a; color: white; font-weight: 600;">
                    I want to buy 🛒
                </button>
            </div>
        </div>

        <!-- Rent Form (Styled as per image) -->
        <div id="rent-form" style="display: none;">
            <div class="d-flex align-items-baseline mb-3">
                <a onclick="goBack()" class="p-0 mr-4 text-dark">
                    <i class="fa fa-arrow-left" style="font-size: 20px; cursor: pointer;"></i>
                </a>
                <h4 class="mb-0 font-weight-bold">Renting</h4>
            </div>

            <form method="get" action="<?php echo esc_url(wc_get_page_permalink('shop')); ?>">
                <div class="form-row">
                    <div class="form-group col-md-6">
                        <label for="start_date" class="text-dark">Start Date</label>
                        <div class="input-group">
                            <input type="date" class="form-control" name="start_date" id="start_date" required
                                placeholder="DD-MM-YYYY">
                        </div>
                    </div>
                    <div class="form-group col-md-6">
                        <label for="end_date" class="text-dark">End Date</label>
                        <div class="input-group">
                            <input type="date" class="form-control" name="end_date" id="end_date" required
                                placeholder="DD-MM-YYYY">
                        </div>
                    </div>
                </div>

                <div class="form-group position-relative">
                    <label for="rent_product_search" class="">Search</label>
                    <input type="text" class="form-control pr-5" name="s" id="rent_product_search"
                        placeholder="Search for product">
                    <span class="position-absolute" style="right: 15px; top: 32px;">
                        <i class="fa fa-search"></i>
                    </span>
                </div>

                <input type="hidden" name="category" value="rent">
                <button type="submit" class="btn btn-block mt-3"
                    style="background: #b22222; color: white; font-weight: bold; padding: 12px; font-size: 16px; border-radius: 6px;">
                    SEARCH
                </button>
            </form>
        </div>

        <!-- Buy Form (Minimal, similar style) -->
        <div id="buy-form" style="display: none;">
            <div class="d-flex align-items-baseline mb-3">
                <a onclick="goBack()" class="p-0 mr-4">
                    <i class="fa fa-arrow-left text-dark" style="font-size: 20px; cursor: pointer;"></i>
                </a>
                <h4 class="mb-0 font-weight-bold">Buying</h4>
            </div>

            <form method="get" action="<?php echo get_permalink(get_page_by_path('buy-used')); ?>">
                <div class="form-group">
                    <label for="buy_product_search" class="font-weight-bold">Search</label>
                    <input type="text" class="form-control" name="s" id="buy_product_search"
                        placeholder="Search for product" autocomplete="off">
                </div>

                <input type="hidden" name="category" value="buy">
                <button type="submit" class="btn btn-block mt-3"
                    style="background: #b22222; color: white; font-weight: bold; padding: 12px; font-size: 16px; border-radius: 6px;">
                    SEARCH
                </button>
            </form>
        </div>
    </div>
    <?php $buy_products = new WP_Query([
        'post_type' => 'product',
        'posts_per_page' => 10,
        'tax_query' => [
            [
                'taxonomy' => 'product_cat',
                'field' => 'slug',
                'terms' => 'buy',
            ],
        ],
    ]);

    $product_suggestions = [];

    if ($buy_products->have_posts()) {
        while ($buy_products->have_posts()) {
            $buy_products->the_post();
            $product_suggestions[] = [
                'title' => get_the_title(),
                'link' => get_permalink(),
            ];
        }
        wp_reset_postdata();
    }
    ?>
    <script>
        const buyProductSuggestions = <?php echo json_encode($product_suggestions); ?>;
    </script>
    <script>
        // document.getElementById('buy-search-form').addEventListener('submit', function (e) {
        //     const input = document.getElementById('buy_product_search');
        //     const keyword = input.value.trim();

        //     if (keyword !== "") {
        //         e.preventDefault(); // Prevent default form action
        //         const baseBuyUsedUrl = "<?php echo get_permalink(get_page_by_path('buy-used')); ?>";
        //         const searchUrl = `${baseBuyUsedUrl}?s=${encodeURIComponent(keyword)}`;
        //         window.location.href = searchUrl;
        //     }
        // });
    </script>

    <script>
        document.getElementById('buy_product_search').addEventListener('focus', function () {
            const input = this;
            const suggestionBoxId = "buy-suggestions";

            document.getElementById(suggestionBoxId)?.remove(); // Remove old suggestions

            const suggestionBox = document.createElement('div');
            suggestionBox.id = suggestionBoxId;
            suggestionBox.style.position = 'absolute';
            suggestionBox.style.backgroundColor = '#fff';
            suggestionBox.style.border = '1px solid #ddd';
            // suggestionBox.style.width = '100%';
            suggestionBox.style.zIndex = 1000;
            suggestionBox.style.top = input.offsetTop + input.offsetHeight + 'px';
            suggestionBox.style.left = input.offsetLeft + 'px';
            suggestionBox.style.maxHeight = '200px';
            suggestionBox.style.overflowY = 'auto';

            input.parentNode.appendChild(suggestionBox);

            if (buyProductSuggestions.length) {
                buyProductSuggestions.forEach(product => {
                    const div = document.createElement('div');
                    div.textContent = product.title;
                    div.style.padding = '8px';
                    div.style.cursor = 'pointer';
                    div.addEventListener('click', () => {
                        input.value = product.title;
                        window.location.href = product.link;
                    });
                    suggestionBox.appendChild(div);
                });
            } else {
                suggestionBox.innerHTML = "<div style='padding: 8px;'>No suggestions available.</div>";
            }

            document.addEventListener('click', function handler(e) {
                if (!suggestionBox.contains(e.target) && e.target !== input) {
                    suggestionBox.remove();
                    document.removeEventListener('click', handler);
                }
            });
        });
    </script>
    <script>
        document.getElementById('rent-button').addEventListener('click', function () {
            document.getElementById('intro-section').style.display = 'none';
            document.getElementById('rent-form').style.display = 'block';
        });

        document.getElementById('buy-button').addEventListener('click', function () {
            document.getElementById('intro-section').style.display = 'none';
            document.getElementById('buy-form').style.display = 'block';
        });

        function goBack() {
            document.getElementById('intro-section').style.display = 'block';
            document.getElementById('rent-form').style.display = 'none';
            document.getElementById('buy-form').style.display = 'none';
        }
    </script>
    <?php
    return ob_get_clean(); // Return the buffered content
}
add_shortcode('rent_buy_interface', 'rent_buy_interface');


add_action('pre_get_posts', 'custom_rent_buy_search_query');
function custom_rent_buy_search_query($query)
{
    if (!is_admin() && $query->is_main_query() && $query->is_search()) {
        $category = isset($_GET['category']) ? sanitize_text_field($_GET['category']) : '';

        // Filter for rent category
        if ($category === 'rent') {
            $tax_query = array(
                array(
                    'taxonomy' => 'product_cat',
                    'field' => 'slug',
                    'terms' => 'rent',
                ),
            );

            $meta_query = array();
            $query->set('tax_query', $tax_query);
            $query->set('meta_query', $meta_query);
            $query->set('post_type', 'product');
        }

        // Filter for buy category
        if ($category === 'buy') {
            $tax_query = array(
                array(
                    'taxonomy' => 'product_cat',
                    'field' => 'slug',
                    'terms' => 'buy',
                ),
            );

            $query->set('tax_query', $tax_query);
            $query->set('post_type', 'product');
            $query->set('meta_query', array(
                array(
                    'key' => '_stock_status',
                    'value' => 'instock',
                ),
            ));
        }
    }
}


add_action('wp_ajax_get_buy_product_suggestions', 'get_buy_product_suggestions');
add_action('wp_ajax_nopriv_get_buy_product_suggestions', 'get_buy_product_suggestions');

function get_buy_product_suggestions()
{
    $args = array(
        'post_type' => 'product',
        'posts_per_page' => 5,
        'tax_query' => array(
            array(
                'taxonomy' => 'product_cat',
                'field' => 'slug',
                'terms' => 'buy',
            )
        ),
        'orderby' => 'date',
        'order' => 'DESC'
    );

    $query = new WP_Query($args);
    $suggestions = [];

    if ($query->have_posts()) {
        while ($query->have_posts()) {
            $query->the_post();
            $suggestions[] = array(
                'title' => get_the_title(),
                'link' => get_permalink()
            );
        }
        wp_reset_postdata();
    }

    wp_send_json_success($suggestions);
}

// Add rental duration to cart (for display purposes)
add_filter('woocommerce_add_cart_item_data', 'add_rental_dates_to_cart', 10, 3);
function add_rental_dates_to_cart($cart_item_data, $product_id, $variation_id)
{
    if (isset($_GET['category']) && $_GET['category'] === 'rent') {
        if (isset($_GET['start_date']) && isset($_GET['end_date'])) {
            $cart_item_data['rental_start_date'] = sanitize_text_field($_GET['start_date']);
            $cart_item_data['rental_end_date'] = sanitize_text_field($_GET['end_date']);
        }
    }
    return $cart_item_data;
}

// Display rental dates in cart
add_filter('woocommerce_get_item_data', 'display_rental_dates_in_cart', 10, 2);
function display_rental_dates_in_cart($item_data, $cart_item)
{
    if (isset($cart_item['rental_start_date']) && isset($cart_item['rental_end_date'])) {
        $item_data[] = array(
            'key' => 'Start Date',
            'value' => $cart_item['rental_start_date'],
        );
        $item_data[] = array(
            'key' => 'End Date',
            'value' => $cart_item['rental_end_date'],
        );
    }
    return $item_data;
}

Youez - 2016 - github.com/yon3zu
LinuXploit