316 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			316 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * Dashboard Widgets
 | |
|  *
 | |
|  * @package     EDD
 | |
|  * @subpackage  Admin/Dashboard
 | |
|  * @copyright   Copyright (c) 2018, Easy Digital Downloads, LLC
 | |
|  * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
 | |
|  * @since       1.0
 | |
|  */
 | |
| 
 | |
| // Exit if accessed directly
 | |
| defined( 'ABSPATH' ) || exit;
 | |
| 
 | |
| /**
 | |
|  * Registers the dashboard widgets
 | |
|  *
 | |
|  * @author Sunny Ratilal
 | |
|  * @since 1.2.2
 | |
|  * @return void
 | |
|  */
 | |
| function edd_register_dashboard_widgets() {
 | |
| 	if ( current_user_can( apply_filters( 'edd_dashboard_stats_cap', 'view_shop_reports' ) ) ) {
 | |
| 		wp_add_dashboard_widget( 'edd_dashboard_sales', __('Easy Digital Downloads Sales Summary','easy-digital-downloads' ), 'edd_dashboard_sales_widget' );
 | |
| 	}
 | |
| }
 | |
| add_action('wp_dashboard_setup', 'edd_register_dashboard_widgets', 10 );
 | |
| 
 | |
| /**
 | |
|  * Sales Summary Dashboard Widget
 | |
|  *
 | |
|  * Builds and renders the Sales Summary dashboard widget. This widget displays
 | |
|  * the current month's sales and earnings, total sales and earnings best selling
 | |
|  * downloads as well as recent purchases made on your EDD Store.
 | |
|  *
 | |
|  * @author Sunny Ratilal
 | |
|  * @since 1.2.2
 | |
|  * @return void
 | |
|  */
 | |
| function edd_dashboard_sales_widget() {
 | |
| 	if ( ! edd_has_upgrade_completed( 'migrate_orders' ) ) {
 | |
| 		if ( get_option( 'edd_v30_cli_migration_running' ) ) {
 | |
| 			printf(
 | |
| 				'<p>%1$s %2$s</p>',
 | |
| 				esc_html__( 'Easy Digital Downloads is performing a database migration via WP-CLI.', 'easy-digital-downloads' ),
 | |
| 				esc_html__( 'This summary will be available when that has completed.', 'easy-digital-downloads' )
 | |
| 			);
 | |
| 			return;
 | |
| 		}
 | |
| 		global $wpdb;
 | |
| 		$orders = $wpdb->get_var( "SELECT ID FROM {$wpdb->posts} WHERE post_type = 'edd_payment' LIMIT 1" );
 | |
| 		if ( ! empty( $orders ) ) {
 | |
| 			$url = add_query_arg(
 | |
| 				array(
 | |
| 					'page'        => 'edd-upgrades',
 | |
| 					'edd-upgrade' => 'v30_migration',
 | |
| 				),
 | |
| 				admin_url( 'index.php' )
 | |
| 			);
 | |
| 			printf(
 | |
| 				'<p>%1$s %2$s<a href="%3$s">%4$s</a></p>',
 | |
| 				esc_html__( 'Easy Digital Downloads needs to upgrade the database.', 'easy-digital-downloads' ),
 | |
| 				esc_html__( 'This summary will be available when that has completed.', 'easy-digital-downloads' ),
 | |
| 				esc_url( $url ),
 | |
| 				esc_html__( 'Begin the upgrade.', 'easy-digital-downloads' )
 | |
| 			);
 | |
| 			return;
 | |
| 		}
 | |
| 	}
 | |
| 	wp_enqueue_script( 'edd-admin-dashboard' );
 | |
| 
 | |
| 	/**
 | |
| 	 * Action hook to add content to the dashboard widget.
 | |
| 	 * This content will not be replaced by the AJAX function:
 | |
| 	 * only the "edd-loading" content will.
 | |
| 	 *
 | |
| 	 * @since 2.11.4
 | |
| 	 */
 | |
| 	do_action( 'edd_dashboard_sales_widget' );
 | |
| 	?>
 | |
| 	<p class="edd-loading"><img src="<?php echo esc_url( EDD_PLUGIN_URL . 'assets/images/loading.gif' ); ?>"></p>
 | |
| 	<?php
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Gets the sales earnings/count data for the dashboard widget.
 | |
|  *
 | |
|  * @since 3.0.0
 | |
|  * @return array
 | |
|  */
 | |
| function edd_get_dashboard_sales_widget_data() {
 | |
| 	$data   = array();
 | |
| 	$ranges = array( 'this_month', 'last_month', 'today', 'total' );
 | |
| 	foreach ( $ranges as $range ) {
 | |
| 		$args = array(
 | |
| 			'range'         => $range,
 | |
| 			'output'        => 'formatted',
 | |
| 			'revenue_type'  => 'net',
 | |
| 		);
 | |
| 		if ( 'total' === $range ) {
 | |
| 			unset( $args['range'] );
 | |
| 		}
 | |
| 		// Remove filters so that deprecation notices are not unnecessarily logged outside of reports.
 | |
| 		remove_all_filters( 'edd_report_views' );
 | |
| 		$stats          = new EDD\Stats( $args );
 | |
| 		$data[ $range ] = array(
 | |
| 			'earnings' => $stats->get_order_earnings(),
 | |
| 			'count'    => $stats->get_order_count(),
 | |
| 		);
 | |
| 	}
 | |
| 
 | |
| 	return $data;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Loads the dashboard sales widget via ajax
 | |
|  *
 | |
|  * @since 2.1
 | |
|  * @return void
 | |
|  */
 | |
| function edd_load_dashboard_sales_widget( ) {
 | |
| 
 | |
| 	if ( ! current_user_can( apply_filters( 'edd_dashboard_stats_cap', 'view_shop_reports' ) ) ) {
 | |
| 		die();
 | |
| 	}
 | |
| 
 | |
| 	$stats = new EDD_Payment_Stats();
 | |
| 	$data  = edd_get_dashboard_sales_widget_data(); ?>
 | |
| 	<div class="edd_dashboard_widget">
 | |
| 		<div class="table table_left table_current_month">
 | |
| 			<table>
 | |
| 				<thead>
 | |
| 					<tr>
 | |
| 						<td colspan="2"><?php esc_html_e( 'Current Month', 'easy-digital-downloads' ); ?> — <?php esc_html_e( 'Net', 'easy-digital-downloads' ); ?></td>
 | |
| 					</tr>
 | |
| 				</thead>
 | |
| 				<tbody>
 | |
| 					<tr>
 | |
| 						<td class="first t monthly_earnings"><?php esc_html_e( 'Earnings', 'easy-digital-downloads' ); ?></td>
 | |
| 						<td class="b b-earnings"><?php echo esc_html( $data['this_month']['earnings'] ); ?></td>
 | |
| 					</tr>
 | |
| 						<td class="first t monthly_sales"><?php echo esc_html( _n( 'Sale', 'Sales', $data['this_month']['count'], 'easy-digital-downloads' ) ); ?></td>
 | |
| 						<td class="b b-sales"><?php echo esc_html( $data['this_month']['count'] ); ?></td>
 | |
| 					</tr>
 | |
| 				</tbody>
 | |
| 			</table>
 | |
| 			<table>
 | |
| 				<thead>
 | |
| 					<tr>
 | |
| 						<td colspan="2"><?php esc_html_e( 'Last Month', 'easy-digital-downloads' ); ?> — <?php esc_html_e( 'Net', 'easy-digital-downloads' ); ?></td>
 | |
| 					</tr>
 | |
| 				</thead>
 | |
| 				<tbody>
 | |
| 					<tr>
 | |
| 						<td class="first t earnings"><?php esc_html_e( 'Earnings', 'easy-digital-downloads' ); ?></td>
 | |
| 						<td class="b b-last-month-earnings"><?php echo esc_html( $data['last_month']['earnings'] ); ?></td>
 | |
| 					</tr>
 | |
| 					<tr>
 | |
| 						<td class="first t sales"><?php echo esc_html( _n( 'Sale', 'Sales', $data['last_month']['count'], 'easy-digital-downloads' ) ); ?></td>
 | |
| 						<td class="b b-last-month-sales"><?php echo esc_html( $data['last_month']['count'] ); ?></td>
 | |
| 					</tr>
 | |
| 				</tbody>
 | |
| 			</table>
 | |
| 		</div>
 | |
| 		<div class="table table_right table_today">
 | |
| 			<table>
 | |
| 				<thead>
 | |
| 					<tr>
 | |
| 						<td colspan="2">
 | |
| 							<?php esc_html_e( 'Today', 'easy-digital-downloads' ); ?> — <?php esc_html_e( 'Net', 'easy-digital-downloads' ); ?>
 | |
| 						</td>
 | |
| 					</tr>
 | |
| 				</thead>
 | |
| 				<tbody>
 | |
| 					<tr>
 | |
| 						<td class="t sales"><?php esc_html_e( 'Earnings', 'easy-digital-downloads' ); ?></td>
 | |
| 						<td class="last b b-earnings">
 | |
| 							<?php echo esc_html( $data['today']['earnings'] ); ?>
 | |
| 						</td>
 | |
| 					</tr>
 | |
| 					<tr class="t sales">
 | |
| 						<td class="t sales"><?php echo esc_html( _n( 'Sale', 'Sales', $data['today']['count'], 'easy-digital-downloads' ) ); ?></td>
 | |
| 						<td class="last b b-sales"><?php echo esc_html( $data['today']['count'] ); ?></td>
 | |
| 					</tr>
 | |
| 				</tbody>
 | |
| 			</table>
 | |
| 		</div>
 | |
| 		<div class="table table_right table_totals">
 | |
| 			<table>
 | |
| 				<thead>
 | |
| 					<tr>
 | |
| 						<td colspan="2">
 | |
| 							<?php esc_html_e( 'All Time', 'easy-digital-downloads' ); ?> — <?php esc_html_e( 'Net', 'easy-digital-downloads' ); ?>
 | |
| 						</td>
 | |
| 					</tr>
 | |
| 				</thead>
 | |
| 				<tbody>
 | |
| 					<tr>
 | |
| 						<td class="t earnings"><?php esc_html_e( 'Total Earnings', 'easy-digital-downloads' ); ?></td>
 | |
| 						<td class="last b b-earnings"><?php echo esc_html( $data['total']['earnings'] ); ?></td>
 | |
| 					</tr>
 | |
| 					<tr>
 | |
| 						<td class="t sales"><?php echo esc_html( _n( 'Sale', 'Sales', $data['total']['count'], 'easy-digital-downloads' ) ); ?></td>
 | |
| 						<td class="last b b-sales"><?php echo esc_html( $data['total']['count'] ); ?></td>
 | |
| 					</tr>
 | |
| 				</tbody>
 | |
| 			</table>
 | |
| 		</div>
 | |
| 		<div style="clear: both"></div>
 | |
| 		<?php do_action( 'edd_sales_summary_widget_after_stats', $stats ); ?>
 | |
| 		<?php
 | |
| 		$orders = edd_get_orders(
 | |
| 			array(
 | |
| 				'number' => 5,
 | |
| 				'status' => edd_get_net_order_statuses(),
 | |
| 				'type'   => 'sale',
 | |
| 			)
 | |
| 		);
 | |
| 
 | |
| 		if ( $orders ) { ?>
 | |
| 		<div class="table recent_orders">
 | |
| 			<h3><?php esc_html_e( 'Recent Orders', 'easy-digital-downloads' ); ?></h3>
 | |
| 			<ul>
 | |
| 			<?php
 | |
| 			foreach ( $orders as $order ) {
 | |
| 				$link = edd_get_admin_url(
 | |
| 					array(
 | |
| 						'page' => 'edd-payment-history',
 | |
| 						'view' => 'view-order-details',
 | |
| 						'id'   => urlencode( $order->id ),
 | |
| 					),
 | |
| 					admin_url( 'edit.php' )
 | |
| 				);
 | |
| 				?>
 | |
| 				<li class="edd_order_label">
 | |
| 					<a href="<?php echo esc_url( $link ); ?>">
 | |
| 						<?php
 | |
| 						$customer      = edd_get_customer( $order->customer_id );
 | |
| 						$customer_name = ! empty( $customer->name ) ? $customer->name : __( 'No Name', 'easy-digital-downloads' );
 | |
| 						$item_count    = edd_count_order_items( array( 'order_id' => $order->id ) );
 | |
| 						echo wp_kses_post(
 | |
| 							sprintf(
 | |
| 								/* translators: 1. customer name; 2. number of items purchased; 3. order total */
 | |
| 								_n(
 | |
| 									'%1$s purchased %2$s item for <strong>%3$s</strong>',
 | |
| 									'%1$s purchased %2$s items for <strong>%3$s</strong>',
 | |
| 									$item_count,
 | |
| 									'easy-digital-downloads'
 | |
| 								),
 | |
| 								$customer_name,
 | |
| 								$item_count,
 | |
| 								edd_currency_filter( edd_format_amount( edd_get_order_total( $order->id ) ), $order->currency )
 | |
| 							)
 | |
| 						);
 | |
| 						?>
 | |
| 					</a>
 | |
| 					<br /><?php echo esc_html( edd_date_i18n( $order->date_created ) ); ?> — <?php echo edd_get_status_label( $order->status ); ?>
 | |
| 				</li>
 | |
| 				<?php } // End foreach ?>
 | |
| 		</ul>
 | |
| 			<?php
 | |
| 			$all_orders_link = edd_get_admin_url(
 | |
| 				array(
 | |
| 					'page' => 'edd-payment-history',
 | |
| 				)
 | |
| 			);
 | |
| 			?>
 | |
| 		<a href="<?php echo esc_url( $all_orders_link ); ?>" class="button-secondary"><?php esc_html_e( 'View All Orders', 'easy-digital-downloads' ); ?></a>
 | |
| 		</div>
 | |
| 		<?php } // End if ?>
 | |
| 		<?php do_action( 'edd_sales_summary_widget_after_orders', $orders ); ?>
 | |
| 		<?php
 | |
| 		if ( has_action( 'edd_sales_summary_widget_after_purchases' ) ) {
 | |
| 			_edd_deprecated_hook(
 | |
| 				'edd_sales_summary_widget_after_purchases',
 | |
| 				'3.1.0.1',
 | |
| 				'edd_sales_summary_widget_after_orders',
 | |
| 				'Note: The replacement hook uses the EDD 3.0 order objects, instead of payment objects. Developers will need to make adjustments accordingly.'
 | |
| 			);
 | |
| 			do_action( 'edd_sales_summary_widget_after_purchases', edd_get_payments( array( 'number' => 5, 'status' => 'complete' ) ) );
 | |
| 		}
 | |
| 		?>
 | |
| 	</div>
 | |
| 	<?php
 | |
| 	die();
 | |
| }
 | |
| add_action( 'wp_ajax_edd_load_dashboard_widget', 'edd_load_dashboard_sales_widget' );
 | |
| 
 | |
| /**
 | |
|  * Add download count to At a glance widget
 | |
|  *
 | |
|  * @author Daniel J Griffiths
 | |
|  * @since 2.1
 | |
|  * @return void
 | |
|  */
 | |
| function edd_dashboard_at_a_glance_widget( $items ) {
 | |
| 	$num_posts = wp_count_posts( 'download' );
 | |
| 
 | |
| 	if ( $num_posts && $num_posts->publish ) {
 | |
| 		$text = _n( '%s ' . edd_get_label_singular(), '%s ' . edd_get_label_plural(), $num_posts->publish, 'easy-digital-downloads' );
 | |
| 
 | |
| 		$text = sprintf( $text, number_format_i18n( $num_posts->publish ) );
 | |
| 
 | |
| 		if ( current_user_can( 'edit_products' ) ) {
 | |
| 			$text = sprintf( '<a class="download-count" href="edit.php?post_type=download">%1$s</a>', $text );
 | |
| 		} else {
 | |
| 			$text = sprintf( '<span class="download-count">%1$s</span>', $text );
 | |
| 		}
 | |
| 
 | |
| 		$items[] = $text;
 | |
| 	}
 | |
| 
 | |
| 	return $items;
 | |
| }
 | |
| add_filter( 'dashboard_glance_items', 'edd_dashboard_at_a_glance_widget', 1 );
 |