autoship_update_scheduled_order_handler (function)
(src/scheduled-orders.php) Main handler for updates to Scheduled Orders for the Native UI. It takes the (Scheduled) $order_id, the $action, and the (Scheduled Order) $data as its parameters.
Function
/**
* The main handler for form and endpoint Scheduled Order Updates.
*
* @param int $order_id The Autoship Scheduled Order ID
* @param string $action A valid action to perform.
* @param mixed $data The Data necessary to perform that action.
* @return int|bool|WP_Error True if successful or WR_Error|false on failure.
*/
function autoship_update_scheduled_order_handler( $order_id, $action , $data = array() ) {
$valid_actions = apply_filters( 'autoship_update_scheduled_order_handler_valid_actions', array(
'autoship_add_order_coupon' => true,
'autoship_remove_order_coupon' => true,
'autoship_add_order_item' => true,
'autoship_remove_order_item' => true,
'autoship_update_order' => true,
'autoship_delete_order' => true,
'autoship_update_order_status' => true,
'autoship_update_order_schedule' => true,
'autoship_update_order_shipping_address'=> true,
'autoship_update_schedule_items' => true,
'autoship_update_order_payment_method' => true
), $order_id, $action , $data );
// Rights for use to make the update.
// Defaults to everyone can modify.
if ( !autoship_rights_checker( 'autoship_update_scheduled_order_rights' , array() ) ||
!autoship_rights_checker( "autoship_update_scheduled_order_{$action}_rights" , array() ) ){
wc_add_notice( __( 'Insufficient rights to perform this action.', 'autoship' ), 'error' );
return false;
}
// Check the supplied action is valid and enabled
if ( !isset( $valid_actions[$action] ) || !$valid_actions[$action] ){
wc_add_notice( __( 'The supplied Action is invalid.', 'autoship' ), 'error' );
return false;
}
$scheduled_order_label = autoship_translate_text( 'Scheduled Order' );
$default_msgs = apply_filters("default_{$action}_action_messages", array(
'error' => __( "A problem was encountered while trying to update the {$scheduled_order_label}.", 'autoship' ),
'success' => __("The {$scheduled_order_label} #%s was successfully updated.", 'autoship'),
) );
// Allow adjustments to the data parameter to be made.
$data = apply_filters( 'autoship_update_scheduled_order_handler_call_back_data', $data, $order_id, $action );
do_action( 'autoship_before_update_scheduled_order_handler', $order_id, $action , $data );
// run the actions specific handler
$method = apply_filters( 'autoship_update_scheduled_order_' . $action . '_handler_call_back', $action . '_action_handler', $order_id, $action , $data );
$result = function_exists( $method ) ? $method( $order_id, $data ) : new WP_Error( 'autoship_update_scheduled_order_handler_error', __("The {$scheduled_order_label} could not be updated since the supplied action could not be processed.", 'autoship' ) );
// Check if error
if ( is_wp_error( $result ) ){
do_action( "autoship_after_{$action}_handler_failure", $order_id, $action , $data, $result );
if ( 'User Message' == $result->get_error_code() ){
wc_add_notice( __( $default_msgs['error'] . '<br/>' . $result->get_error_message(), 'autoship' ), 'error' );
return false;
}
wc_add_notice( __( is_wp_error( $result ) ? $default_msgs['error'] . '<br/>Additional Details: ' . $result->get_error_message() : $default_msgs['error'], 'autoship' ), 'error' );
return false;
}
if ( !$result ){
do_action( "autoship_after_{$action}_handler_failure", $order_id, $action , $data, $result );
return false;
}
do_action( "autoship_after_{$action}_handler_success", $order_id, $action , $data );
wc_add_notice( __( sprintf( $default_msgs['success'], $order_id ) , 'autoship' ), 'success' );
do_action( "autoship_after_handler_success", $order_id, $action , $data );
return true;
}