autoship_load_all_products_summary_data_display_notice (function)
( src/product-page.php) Used to load Autoship Cloud data on the WP-Admin > Products > Edit Product page.
/**
* Load Autoship Cloud Data on Edit All Products Screen.
* TODO: Currently hooked into the admin notices but could try to find
* better hook for early data load.
*/
function autoship_load_all_products_summary_data_display_notice (){
// Get the Current Screen object and if doesn't exist escape.
$screen = get_current_screen();
if ( !$screen )
return;
if ( 'edit-product' !== $screen->id || 'edit' !== $screen->parent_base )
return;
// Allow devs to disable admin notice if desired.
if( apply_filters('autoship_display_all_products_sync_admin_notice', false ) )
return;
// Since we're on the All Products screen tap into the current query to
// get the current product ids so we can call the api with these ids.
global $wp_query;
$posts = $wp_query->posts;
$query_ids = wp_list_pluck( $posts, 'ID' );
$filter_count = count ( $query_ids );
// Query these products to see if any have the active flag set.
$products = wc_get_products( array( 'include' => $query_ids, 'limit' => $filter_count ) );
// If No Products Bail.
if ( empty( $products ) )
return;
// Check if global flag is set and if so all are active else
$gobal_active = autoship_global_sync_active_enabled();
$ids = array();
foreach ($products as $key => $product) {
if ( $gobal_active ){
$ids[] = $product->get_id();
// Check if we need to get all variations if this is a variable product.
if ( 'variable' == $product->get_type() && $product->has_child() )
$ids = array_merge( $ids, $product->get_children() );
} else {
// Since global isn't active get check product level
if ( 'yes' === autoship_sync_active_enabled( $product ) ){
$ids[] = $product->get_id();
// Check if we need to get all variations if this is a variable product.
if ( 'variable' == $product->get_type() && $product->has_child() )
$ids = array_merge( $ids, $product->get_children() );
}
}
}
$summary_data = !empty( $ids ) ? autoship_get_all_products_sync_summary ( $ids, count( $ids ) ) : array();
autoship_store_all_products_sync_summary_data( $summary_data );
// Check for a general invalid flag
$invalid_exists = autoship_check_site_settings_for_invalid_products();
if ( !$invalid_exists )
return;
$products_report_url = autoship_admin_products_page_url();
// For now we're only displaying notice for errors
$title = __( 'Invalid Product(s)', 'autoship' );
$status = 'error';
$notice[] = apply_filters( 'autoship_all_products_admin_summary_metabox_notice', sprintf( __("<p>1 or more products activated for Autoship Cloud have become invalid. Please visit <a href=\"%s\"><strong>Autoship Cloud Products</strong></a> to resolve this.</p>" ), $products_report_url ), $summary_data, $products );
// Disabled this functionality so users don't see the details for now.
if ( false ){
$notices = array();
if ( !empty( $summary_data ) && !is_wp_error( $summary_data ) ) {
// Check if there are any invalids
if ( $summary_data['totals']['TotalActiveInvalids'] ){
$title = sprintf( __( '%d Invalid Product(s)', 'autoship' ), $summary_data['totals']['TotalActiveInvalids'] );
$status = 'error';
// All Active but for some reason summary data isn't loaded.
} else if ( $summary_data['totals']['TotalAutoshipActive'] ){
$title = sprintf( __( '%d Active Product(s)', 'autoship' ), $summary_data['totals']['TotalAutoshipActive'] );
$status = 'active';
// All Not Active
} else if ( !$summary_data['totals']['TotalAutoshipActive'] ){
$title = __( 'No Active Product(s)', 'autoship' );
$status = 'not-active';
}
$products_report_url = autoship_admin_products_page_url();
// Add any error notices
if ( $summary_data['totals']['TotalAutoshipActive'] && $summary_data['totals']['TotalActiveInvalids'] ){
$notice[] = apply_filters( 'autoship_all_products_admin_summary_metabox_notice', sprintf( __("<p>A total of <strong>%d</strong> of the filtered Products and associated Variations are Active. <strong>However, %d of the Products or associated Variations filtered are currently Invalid and not synchronized correctly with QPilot.</strong> Invalid products may not process correctly with Scheduled Orders. For additional details please please edit the WooCommerce Product or view the <a href=\"%s\">Autoship Cloud > Products</a> report.</p>" ), $summary_data['totals']['TotalAutoshipActive'], $summary_data['totals']['TotalActiveInvalids'], $products_report_url ), $summary_data, $products );
} else if ( $summary_data['totals']['TotalAutoshipActive'] ){
$notice[] = apply_filters( 'autoship_all_products_admin_summary_metabox_notice', sprintf( __( '<p>There are currently <strong>%d Products</strong> actively synchronized with QPilot. Changes made in WooCommerce to these Products and/or any associated Variations will be synchronized with QPilot.</p>', "autoship" ), $summary_data['totals']['TotalAutoshipActive']), $summary_data, $products );
} else if ( $summary_data['totals']['TotalActiveInvalids'] ){
$notice[] = apply_filters( 'autoship_all_products_admin_summary_metabox_notice', sprintf( __("<p><strong>All %d of the Products and associated Variations filtered below that are Activated are currently not synchronized correctly with QPilot and may be Invalid.</strong> Invalid products may not process correctly with Scheduled Orders. For additional details please please edit the WooCommerce Product or view the <a href=\"%s\">Autoship Cloud > Products</a> report.</p>" ), $summary_data['totals']['TotalActiveInvalids'], $products_report_url ), $summary_data, $products );
} else if ( !$summary_data['totals']['TotalAutoshipActive'] ){
$notice[] = apply_filters( 'autoship_all_products_admin_summary_metabox_notice', sprintf( __( '<p>There are currently <strong>No Products</strong> actively synchronized with QPilot. Only changes made in WooCommerce to Active Products and/or any associated Variations will be synchronized with QPilot.</p>', "autoship" ), $summary_data['totals']['TotalAutoshipActive']), $summary_data, $products );
}
if ( $summary_data['totals']['QuantityScheduled'] ){
$total_string = array();
if ( $summary_data['totals']['TotalQuantityScheduledActive'] )
$total_string[] = $summary_data['totals']['TotalQuantityScheduledActive'] . ' Active';
if ( $summary_data['totals']['TotalQuantityScheduledPaused'] )
$total_string[] = $summary_data['totals']['TotalQuantityScheduledPaused'] . ' Paused';
if ( $summary_data['totals']['TotalQuantityFailed'] )
$total_string[] = $summary_data['totals']['TotalQuantityFailed'] . ' Failed';
if ( $summary_data['totals']['TotalQuantityProcessing'] )
$total_string[] = $summary_data['totals']['TotalQuantityProcessing'] . ' Processing';
$notice[] = apply_filters( 'autoship_all_products_admin_summary_metabox_subnotice', sprintf(
__("<hr/><p>There are a total of <strong>%d Scheduled Orders ( %s )</strong> containing the Active Products and associated Variations filtered below. <br/><strong>Important!</strong> Changes made to product data that is already synchronized (i.e. changing Product Type, Published Status, Moving to Trash, Deleting Products, etc. ) may invalidate those products in QPilot and prevent them from processing with Scheduled Orders' </p>", 'autpship' ),
$summary_data['totals']['QuantityScheduled'],
implode(', ', $total_string ) ), $summary_data, $products );
}
} else {
// Check for Total Sync Error
if ( is_wp_error( $summary_data ) ){
$title = __( 'Error', 'autoship' );
$status = 'error';
$notice[] = apply_filters( 'autoship_all_products_admin_summary_metabox_notice', sprintf( "<p>%s</p>", $summary_data->get_error_message() ), $summary_data, $products );
// No Active Filtered Products.
} else if ( empty( $ids ) ){
$title = __( 'No Active Product(s)', 'autoship' );
$status = 'not-active';
$notice[] = apply_filters( 'autoship_all_products_admin_summary_metabox_notice', sprintf( __( '<p>There are currently <strong>No Products</strong> actively synchronized with QPilot. Only changes made in WooCommerce to Active Products and/or any associated Variations will be synchronized with QPilot.</p>', "autoship" ), 0 ), $summary_data, $products );
// Check for missing data & possible QPilot outage
} else if ( empty( $summary_data ) ){
$api_health_url = autoship_admin_settings_page_url();
$title = __( 'Not Available', 'autoship' );
$status = 'error';
$notice[] = apply_filters( 'autoship_all_products_admin_summary_metabox_notice', sprintf( __( "<p>A problem was encountered while trying to retrieve Product Sync Information from QPilot. Please confirm your <a href=\"%s\">API connection is healthy</a> and setup correctly.", "autoship" ), $api_health_url ), $summary_data, $products );
}
}
}
?>
<div class="autoship-admin-notice notice autoship-<?php echo $status;?>-notice is-dismissible">
<h2><?php echo sprintf( __( 'Autoship Status: <span class="%s">%s</span>', 'autoship' ), $status, $title ); ?></h2>
<?php echo implode('', $notice ); ?>
<?php do_action( 'autoship_all_products_admin_summary_metabox_notice', $status, $summary_data, $products ); ?>
</div>
<?php
}