Merge pull request #22318 from Prospress/fix/21202

Only include the network orders widget on the main site dashboard
This commit is contained in:
Mike Jolley 2019-01-22 14:38:46 +00:00 committed by GitHub
commit 10518228aa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 54 additions and 46 deletions

View File

@ -2,14 +2,12 @@
/** /**
* Admin Dashboard * Admin Dashboard
* *
* @author WooThemes
* @category Admin
* @package WooCommerce/Admin * @package WooCommerce/Admin
* @version 2.1.0 * @version 2.1.0
*/ */
if ( ! defined( 'ABSPATH' ) ) { if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly exit; // Exit if accessed directly.
} }
if ( ! class_exists( 'WC_Admin_Dashboard', false ) ) : if ( ! class_exists( 'WC_Admin_Dashboard', false ) ) :
@ -23,7 +21,7 @@ if ( ! class_exists( 'WC_Admin_Dashboard', false ) ) :
* Hook in tabs. * Hook in tabs.
*/ */
public function __construct() { public function __construct() {
// Only hook in admin parts if the user has admin access // Only hook in admin parts if the user has admin access.
if ( current_user_can( 'view_woocommerce_reports' ) || current_user_can( 'manage_woocommerce' ) || current_user_can( 'publish_shop_orders' ) ) { if ( current_user_can( 'view_woocommerce_reports' ) || current_user_can( 'manage_woocommerce' ) || current_user_can( 'publish_shop_orders' ) ) {
// If on network admin, only load the widget that works in that context and skip the rest. // If on network admin, only load the widget that works in that context and skip the rest.
if ( is_multisite() && is_network_admin() ) { if ( is_multisite() && is_network_admin() ) {
@ -44,7 +42,7 @@ if ( ! class_exists( 'WC_Admin_Dashboard', false ) ) :
wp_add_dashboard_widget( 'woocommerce_dashboard_status', __( 'WooCommerce Status', 'woocommerce' ), array( $this, 'status_widget' ) ); wp_add_dashboard_widget( 'woocommerce_dashboard_status', __( 'WooCommerce Status', 'woocommerce' ), array( $this, 'status_widget' ) );
// Network Order Widget. // Network Order Widget.
if ( is_multisite() ) { if ( is_multisite() && is_main_site() ) {
$this->register_network_order_widget(); $this->register_network_order_widget();
} }
} }
@ -110,39 +108,43 @@ if ( ! class_exists( 'WC_Admin_Dashboard', false ) ) :
echo '<ul class="wc_status_list">'; echo '<ul class="wc_status_list">';
if ( current_user_can( 'view_woocommerce_reports' ) && ( $report_data = $this->get_sales_report_data() ) ) { if ( current_user_can( 'view_woocommerce_reports' ) ) {
?> $report_data = $this->get_sales_report_data();
if ( $report_data ) {
?>
<li class="sales-this-month"> <li class="sales-this-month">
<a href="<?php echo admin_url( 'admin.php?page=wc-reports&tab=orders&range=month' ); ?>"> <a href="<?php echo esc_url( admin_url( 'admin.php?page=wc-reports&tab=orders&range=month' ) ); ?>">
<?php echo $reports->sales_sparkline( '', max( 7, date( 'd', current_time( 'timestamp' ) ) ) ); ?> <?php echo $reports->sales_sparkline( '', max( 7, date( 'd', current_time( 'timestamp' ) ) ) ); // phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped ?>
<?php <?php
/* translators: %s: net sales */
printf( printf(
__( '%s net sales this month', 'woocommerce' ), /* translators: %s: net sales */
esc_html__( '%s net sales this month', 'woocommerce' ),
'<strong>' . wc_price( $report_data->net_sales ) . '</strong>' '<strong>' . wc_price( $report_data->net_sales ) . '</strong>'
); ); // phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped
?> ?>
</a> </a>
</li> </li>
<?php
}
if ( current_user_can( 'view_woocommerce_reports' ) && ( $top_seller = $this->get_top_seller() ) && $top_seller->qty ) {
?>
<li class="best-seller-this-month">
<a href="<?php echo admin_url( 'admin.php?page=wc-reports&tab=orders&report=sales_by_product&range=month&product_ids=' . $top_seller->product_id ); ?>">
<?php echo $reports->sales_sparkline( $top_seller->product_id, max( 7, date( 'd', current_time( 'timestamp' ) ) ), 'count' ); ?>
<?php <?php
/* translators: 1: top seller product title 2: top seller quantity */ }
$top_seller = $this->get_top_seller();
if ( $top_seller && $top_seller->qty ) {
?>
<li class="best-seller-this-month">
<a href="<?php echo esc_url( admin_url( 'admin.php?page=wc-reports&tab=orders&report=sales_by_product&range=month&product_ids=' . $top_seller->product_id ) ); ?>">
<?php echo $reports->sales_sparkline( $top_seller->product_id, max( 7, date( 'd', current_time( 'timestamp' ) ) ), 'count' ); // phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped ?>
<?php
printf( printf(
__( '%1$s top seller this month (sold %2$d)', 'woocommerce' ), /* translators: 1: top seller product title 2: top seller quantity */
esc_html__( '%1$s top seller this month (sold %2$d)', 'woocommerce' ),
'<strong>' . get_the_title( $top_seller->product_id ) . '</strong>', '<strong>' . get_the_title( $top_seller->product_id ) . '</strong>',
$top_seller->qty $top_seller->qty
); ); // phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped
?> ?>
</a> </a>
</li> </li>
<?php <?php
}
} }
$this->status_widget_order_rows(); $this->status_widget_order_rows();
@ -169,24 +171,24 @@ if ( ! class_exists( 'WC_Admin_Dashboard', false ) ) :
} }
?> ?>
<li class="processing-orders"> <li class="processing-orders">
<a href="<?php echo admin_url( 'edit.php?post_status=wc-processing&post_type=shop_order' ); ?>"> <a href="<?php echo esc_url( admin_url( 'edit.php?post_status=wc-processing&post_type=shop_order' ) ); ?>">
<?php <?php
/* translators: %s: order count */
printf( printf(
/* translators: %s: order count */
_n( '<strong>%s order</strong> awaiting processing', '<strong>%s orders</strong> awaiting processing', $processing_count, 'woocommerce' ), _n( '<strong>%s order</strong> awaiting processing', '<strong>%s orders</strong> awaiting processing', $processing_count, 'woocommerce' ),
$processing_count $processing_count
); ); // phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped
?> ?>
</a> </a>
</li> </li>
<li class="on-hold-orders"> <li class="on-hold-orders">
<a href="<?php echo admin_url( 'edit.php?post_status=wc-on-hold&post_type=shop_order' ); ?>"> <a href="<?php echo esc_url( admin_url( 'edit.php?post_status=wc-on-hold&post_type=shop_order' ) ); ?>">
<?php <?php
/* translators: %s: order count */
printf( printf(
/* translators: %s: order count */
_n( '<strong>%s order</strong> on-hold', '<strong>%s orders</strong> on-hold', $on_hold_count, 'woocommerce' ), _n( '<strong>%s order</strong> on-hold', '<strong>%s orders</strong> on-hold', $on_hold_count, 'woocommerce' ),
$on_hold_count $on_hold_count
); ); // phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped
?> ?>
</a> </a>
</li> </li>
@ -199,12 +201,13 @@ if ( ! class_exists( 'WC_Admin_Dashboard', false ) ) :
private function status_widget_stock_rows() { private function status_widget_stock_rows() {
global $wpdb; global $wpdb;
// Get products using a query - this is too advanced for get_posts :( // Get products using a query - this is too advanced for get_posts.
$stock = absint( max( get_option( 'woocommerce_notify_low_stock_amount' ), 1 ) ); $stock = absint( max( get_option( 'woocommerce_notify_low_stock_amount' ), 1 ) );
$nostock = absint( max( get_option( 'woocommerce_notify_no_stock_amount' ), 0 ) ); $nostock = absint( max( get_option( 'woocommerce_notify_no_stock_amount' ), 0 ) );
$transient_name = 'wc_low_stock_count'; $transient_name = 'wc_low_stock_count';
if ( false === ( $lowinstock_count = get_transient( $transient_name ) ) ) { $lowinstock_count = get_transient( $transient_name );
if ( false === $lowinstock_count ) {
$query_from = apply_filters( $query_from = apply_filters(
'woocommerce_report_low_in_stock_query_from', 'woocommerce_report_low_in_stock_query_from',
"FROM {$wpdb->posts} as posts "FROM {$wpdb->posts} as posts
@ -223,7 +226,8 @@ if ( ! class_exists( 'WC_Admin_Dashboard', false ) ) :
$transient_name = 'wc_outofstock_count'; $transient_name = 'wc_outofstock_count';
if ( false === ( $outofstock_count = get_transient( $transient_name ) ) ) { $outofstock_count = get_transient( $transient_name );
if ( false === $outofstock_count ) {
$query_from = apply_filters( $query_from = apply_filters(
'woocommerce_report_out_of_stock_query_from', 'woocommerce_report_out_of_stock_query_from',
"FROM {$wpdb->posts} as posts "FROM {$wpdb->posts} as posts
@ -240,24 +244,24 @@ if ( ! class_exists( 'WC_Admin_Dashboard', false ) ) :
} }
?> ?>
<li class="low-in-stock"> <li class="low-in-stock">
<a href="<?php echo admin_url( 'admin.php?page=wc-reports&tab=stock&report=low_in_stock' ); ?>"> <a href="<?php echo esc_url( admin_url( 'admin.php?page=wc-reports&tab=stock&report=low_in_stock' ) ); ?>">
<?php <?php
/* translators: %s: order count */
printf( printf(
/* translators: %s: order count */
_n( '<strong>%s product</strong> low in stock', '<strong>%s products</strong> low in stock', $lowinstock_count, 'woocommerce' ), _n( '<strong>%s product</strong> low in stock', '<strong>%s products</strong> low in stock', $lowinstock_count, 'woocommerce' ),
$lowinstock_count $lowinstock_count
); ); // phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped
?> ?>
</a> </a>
</li> </li>
<li class="out-of-stock"> <li class="out-of-stock">
<a href="<?php echo admin_url( 'admin.php?page=wc-reports&tab=stock&report=out_of_stock' ); ?>"> <a href="<?php echo esc_url( admin_url( 'admin.php?page=wc-reports&tab=stock&report=out_of_stock' ) ); ?>">
<?php <?php
/* translators: %s: order count */
printf( printf(
/* translators: %s: order count */
_n( '<strong>%s product</strong> out of stock', '<strong>%s products</strong> out of stock', $outofstock_count, 'woocommerce' ), _n( '<strong>%s product</strong> out of stock', '<strong>%s products</strong> out of stock', $outofstock_count, 'woocommerce' ),
$outofstock_count $outofstock_count
); ); // phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped
?> ?>
</a> </a>
</li> </li>
@ -298,16 +302,16 @@ if ( ! class_exists( 'WC_Admin_Dashboard', false ) ) :
$rating = intval( get_comment_meta( $comment->comment_ID, 'rating', true ) ); $rating = intval( get_comment_meta( $comment->comment_ID, 'rating', true ) );
/* translators: %s: rating */ /* translators: %s: rating */
echo '<div class="star-rating"><span style="width:' . ( $rating * 20 ) . '%">' . sprintf( __( '%s out of 5', 'woocommerce' ), $rating ) . '</span></div>'; echo '<div class="star-rating"><span style="width:' . esc_html( $rating * 20 ) . '%">' . sprintf( esc_html__( '%s out of 5', 'woocommerce' ), esc_html( $rating ) ) . '</span></div>';
/* translators: %s: review author */ /* translators: %s: review author */
echo '<h4 class="meta"><a href="' . get_permalink( $comment->ID ) . '#comment-' . absint( $comment->comment_ID ) . '">' . esc_html( apply_filters( 'woocommerce_admin_dashboard_recent_reviews', $comment->post_title, $comment ) ) . '</a> ' . sprintf( __( 'reviewed by %s', 'woocommerce' ), esc_html( $comment->comment_author ) ) . '</h4>'; echo '<h4 class="meta"><a href="' . esc_url( get_permalink( $comment->ID ) ) . '#comment-' . esc_html( absint( $comment->comment_ID ) ) . '">' . esc_html( apply_filters( 'woocommerce_admin_dashboard_recent_reviews', $comment->post_title, $comment ) ) . '</a> ' . sprintf( esc_html__( 'reviewed by %s', 'woocommerce' ), esc_html( $comment->comment_author ) ) . '</h4>';
echo '<blockquote>' . wp_kses_data( $comment->comment_content ) . '</blockquote></li>'; echo '<blockquote>' . wp_kses_data( $comment->comment_content ) . '</blockquote></li>';
} }
echo '</ul>'; echo '</ul>';
} else { } else {
echo '<p>' . __( 'There are no product reviews yet.', 'woocommerce' ) . '</p>'; echo '<p>' . esc_html__( 'There are no product reviews yet.', 'woocommerce' ) . '</p>';
} }
} }
@ -326,7 +330,9 @@ if ( ! class_exists( 'WC_Admin_Dashboard', false ) ) :
$blog_ids = wp_list_pluck( $blogs, 'userblog_id' ); $blog_ids = wp_list_pluck( $blogs, 'userblog_id' );
wp_localize_script( wp_localize_script(
'wc-network-orders', 'woocommerce_network_orders', array( 'wc-network-orders',
'woocommerce_network_orders',
array(
'nonce' => wp_create_nonce( 'wp_rest' ), 'nonce' => wp_create_nonce( 'wp_rest' ),
'sites' => array_values( $blog_ids ), 'sites' => array_values( $blog_ids ),
'order_endpoint' => get_rest_url( null, 'wc/v3/orders/network' ), 'order_endpoint' => get_rest_url( null, 'wc/v3/orders/network' ),
@ -357,6 +363,7 @@ if ( ! class_exists( 'WC_Admin_Dashboard', false ) ) :
<?php esc_html_e( 'No orders found', 'woocommerce' ); ?> <?php esc_html_e( 'No orders found', 'woocommerce' ); ?>
</p> </p>
</div> </div>
<?php // @codingStandardsIgnoreStart ?>
<script type="text/template" id="network-orders-row-template"> <script type="text/template" id="network-orders-row-template">
<tr> <tr>
<td> <td>
@ -374,8 +381,9 @@ if ( ! class_exists( 'WC_Admin_Dashboard', false ) ) :
</td> </td>
</tr> </tr>
</script> </script>
<?php // @codingStandardsIgnoreEnd ?>
</div> </div>
<?php <?php
} }
} }