Untitled

 avatar
webwizards
plain_text
14 days ago
4.1 kB
7
Indexable
add_action('b2bking_custom_new_subaccount_fields', function($user_id = 0){
    $is_manager = ($user_id !== 0) ? get_user_meta($user_id, 'is_manager', true) : '';
    $checked = ($is_manager === 'yes');
    ?>
    <div class="b2bking_subaccounts_new_account_container_content_element_checkbox">
        <div class="b2bking_subaccounts_new_account_container_content_element_checkbox_name">
            <?php esc_html_e('Manager','b2bking'); ?>
        </div>
        <input type="hidden" name="b2bking_is_manager" class="b2bking_is_manager_hidden" value="<?php echo $checked ? 'yes' : 'no'; ?>">
        <input type="checkbox" class="b2bking_subaccounts_new_account_container_content_element_checkbox_input b2bking_is_manager_checkbox" <?php checked($checked); ?>>
    </div>
    <?php
});

add_action('wp_footer', function(){
    ?>
    <script>
    jQuery(document).on('change', '.b2bking_is_manager_checkbox', function(){
        jQuery(this).closest('.b2bking_subaccounts_new_account_container_content_element_checkbox')
            .find('.b2bking_is_manager_hidden')
            .val(this.checked ? 'yes' : 'no');
    });
    </script>
    <?php
});

add_filter('b2bking_custom_new_subaccount_field_names', function($fields){
    $fields = array('b2bking_is_manager');
    return $fields;
}, 10, 1);

add_filter('b2bking_custom_field_meta', function($field_name){
    if ($field_name === 'b2bking_is_manager'){
        $field_name = 'is_manager';
    }
    return $field_name;
}, 10, 1);


function my_b2bking_manager_can_handle_order($order) {
    if (!$order || !is_user_logged_in()) return false;
    $current_user_id = get_current_user_id();

    if (get_user_meta($current_user_id, 'b2bking_account_type', true) !== 'subaccount') return false;
    if (get_user_meta($current_user_id, 'is_manager', true) !== 'yes') return false;

    $manager_parent = intval(get_user_meta($current_user_id, 'b2bking_account_parent', true));
    if ($manager_parent === 0) return false;

    $order_customer_id = $order->get_customer_id();
    // Order placed by the parent itself
    if (intval($order_customer_id) === $manager_parent) return true;
    // Or by a sibling subaccount under the same parent
    $order_customer_parent = intval(get_user_meta($order_customer_id, 'b2bking_account_parent', true));
    return ($order_customer_parent === $manager_parent);
}

/**
 * Allow Manager subaccounts to pass the server-side approve auth check.
 */
add_filter('b2bking_approve_order_only_direct_parent', function($only_direct_parent){
    if (empty($_POST['orderid'])) return $only_direct_parent;
    $order = wc_get_order(sanitize_text_field($_POST['orderid']));
    if (my_b2bking_manager_can_handle_order($order)) {
        return false; // skip the "must be direct parent" requirement for this manager
    }
    return $only_direct_parent;
});

/**
 * Same for reject.
 */
add_filter('b2bking_reject_order_only_direct_parent', function($only_direct_parent){
    if (empty($_POST['orderid'])) return $only_direct_parent;
    $order = wc_get_order(sanitize_text_field($_POST['orderid']));
    if (my_b2bking_manager_can_handle_order($order)) {
        return false;
    }
    return $only_direct_parent;
});

/**
 * Render Approve / Reject buttons for Manager subaccounts on the order details page.
 * The existing B2BKing JS picks them up by the #b2bking_approve_order / #b2bking_reject_order ids.
 */
add_action('b2bking_subaccount_order_pending_approval', function($order){
    if (!my_b2bking_manager_can_handle_order($order)) return;
    ?>
    <div class="b2bking_order_approve_reject_container">
        <input type="hidden" id="b2bking_pay_now_url" value="<?php echo esc_attr($order->get_checkout_payment_url()); ?>">
        <input type="hidden" id="b2bking_order_number" value="<?php echo esc_attr($order->get_id()); ?>">
        <a class="button" id="b2bking_approve_order"><?php esc_html_e('Approve', 'b2bking'); ?></a>
        &nbsp;&nbsp;&nbsp;<a class="button" id="b2bking_reject_order"><?php esc_html_e('Reject', 'b2bking'); ?></a>
    </div>
    <br><br>
    <?php
});
Editor is loading...
Leave a Comment