autoship_update_order_schedule_action_handler (function)
( src/scheduled-orders.php) The main handler for the for updating Scheduled Orders schedule (Frequency, Frequency Type, Next Occurrence Date). It takes the (Scheduled) $order_id, and the $data needed to perform the action as parameters and returns whether the update was successful or not.
Function
/**
* The main handler for the autoship_update_order_schedule action
* Updates the Schedule ( Frequency, Frequency Type, and/or Next Occurrence ) for the supplied order ID
*
* @param int $order_id The Autoship Scheduled Order ID
* @param mixed $data The Data necessary to perform this action.
* @return int|bool|WP_Error True if successful or WR_Error|false on failure.
*/
function autoship_update_order_schedule_action_handler( $order_id, $data ){
$scheduled_order_label = autoship_translate_text( 'Scheduled Order' );
//Verify it needs to be updated if possible
$frequency_unchanged = $frequency_type_unchanged = $next_occurrence_unchanged = false;
if ( isset( $data['original_autoship_order'] ) && !empty( $data['original_autoship_order'] ) ) {
// Check to see if the frequency should be updated.
$frequency_unchanged = $data['frequency'] == $data['original_autoship_order']['frequency'];
$frequency_type_unchanged = $data['frequency_type'] == $data['original_autoship_order']['frequencyType'];
$next_occurrence_unchanged = $data['next_occurrence'] == $data['original_autoship_order']['nextOccurrenceUtc'];
if ( $frequency_unchanged && $frequency_type_unchanged && $next_occurrence_unchanged ){
do_action( 'autoship_after_update_scheduled_order_schedule_handler_nochange', $order_id, $action , $data );
wc_add_notice( __( sprintf( 'No changes updated for %s #%s.', $scheduled_order_label, $order_id ), 'autoship' ), 'notice' );
return true;
}
}
$error = '';
$updated = $result = false;
if ( !$frequency_unchanged || !$frequency_type_unchanged ){
// Run the Set method
// Method returns WP_Error on failure.
$result = autoship_set_scheduled_order_frequency ( $order_id, $data['frequency_type'], $data['frequency'] );
$error = __( sprintf( "A problem was encountered updating the %s's Frequency.", $scheduled_order_label ), 'autoship');
$updated = !is_wp_error( $result );
}
if ( !$next_occurrence_unchanged && !is_wp_error( $result ) ){
// Run the Set method
// Method returns WP_Error on failure.
$result = update_scheduled_order_next_occurrence ( $order_id, $data['next_occurrence'] );
$error = $updated ? __("The {$scheduled_order_label}'s Frequency was updated successfully, however, there was a problem updating the Next Occurrence Date.") :
__("A problem was encountered updating the {$scheduled_order_label}'s Next occurrence Date.", 'autoship');
}
// Dynamically the error message to the actions message filter.
if ( !empty( $error ) )
add_filter( 'default_autoship_update_order_schedule_action_messages', function( $messages ) { return array_merge( $messages, array(
'error' => $error,
)); }, 11, 1 );
return $result;
}