Untitled
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>
<a class="button" id="b2bking_reject_order"><?php esc_html_e('Reject', 'b2bking'); ?></a>
</div>
<br><br>
<?php
});Editor is loading...
Leave a Comment