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;

}