woocommerce/includes/admin/class-wc-admin-reports.php

180 lines
5.2 KiB
PHP
Raw Normal View History

2021-12-10 12:03:04 +00:00
<?php
/**
* Admin Reports
*
* Functions used for displaying sales and customer reports in admin.
*
* @author WooThemes
* @category Admin
* @package WooCommerce\Admin\Reports
* @version 2.0.0
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
if ( class_exists( 'WC_Admin_Reports', false ) ) {
return;
}
/**
* WC_Admin_Reports Class.
*/
class WC_Admin_Reports {
/**
* Handles output of the reports page in admin.
*/
public static function output() {
$reports = self::get_reports();
$first_tab = array_keys( $reports );
$current_tab = ! empty( $_GET['tab'] ) && array_key_exists( $_GET['tab'], $reports ) ? sanitize_title( $_GET['tab'] ) : $first_tab[0];
$current_report = isset( $_GET['report'] ) ? sanitize_title( $_GET['report'] ) : current( array_keys( $reports[ $current_tab ]['reports'] ) );
include_once dirname( __FILE__ ) . '/reports/class-wc-admin-report.php';
include_once dirname( __FILE__ ) . '/views/html-admin-page-reports.php';
}
/**
* Returns the definitions for the reports to show in admin.
*
* @return array
*/
public static function get_reports() {
$reports = array(
'orders' => array(
'title' => __( 'Orders', 'woocommerce' ),
'reports' => array(
'sales_by_date' => array(
'title' => __( 'Sales by date', 'woocommerce' ),
'description' => '',
'hide_title' => true,
'callback' => array( __CLASS__, 'get_report' ),
),
'sales_by_product' => array(
'title' => __( 'Sales by product', 'woocommerce' ),
'description' => '',
'hide_title' => true,
'callback' => array( __CLASS__, 'get_report' ),
),
'sales_by_category' => array(
'title' => __( 'Sales by category', 'woocommerce' ),
'description' => '',
'hide_title' => true,
'callback' => array( __CLASS__, 'get_report' ),
),
'coupon_usage' => array(
'title' => __( 'Coupons by date', 'woocommerce' ),
'description' => '',
'hide_title' => true,
'callback' => array( __CLASS__, 'get_report' ),
),
'downloads' => array(
'title' => __( 'Customer downloads', 'woocommerce' ),
'description' => '',
'hide_title' => true,
'callback' => array( __CLASS__, 'get_report' ),
),
),
),
'customers' => array(
'title' => __( 'Customers', 'woocommerce' ),
'reports' => array(
'customers' => array(
'title' => __( 'Customers vs. guests', 'woocommerce' ),
'description' => '',
'hide_title' => true,
'callback' => array( __CLASS__, 'get_report' ),
),
'customer_list' => array(
'title' => __( 'Customer list', 'woocommerce' ),
'description' => '',
'hide_title' => true,
'callback' => array( __CLASS__, 'get_report' ),
),
),
),
'stock' => array(
'title' => __( 'Stock', 'woocommerce' ),
'reports' => array(
'low_in_stock' => array(
'title' => __( 'Low in stock', 'woocommerce' ),
'description' => '',
'hide_title' => true,
'callback' => array( __CLASS__, 'get_report' ),
),
'out_of_stock' => array(
'title' => __( 'Out of stock', 'woocommerce' ),
'description' => '',
'hide_title' => true,
'callback' => array( __CLASS__, 'get_report' ),
),
'most_stocked' => array(
'title' => __( 'Most stocked', 'woocommerce' ),
'description' => '',
'hide_title' => true,
'callback' => array( __CLASS__, 'get_report' ),
),
),
),
);
if ( wc_tax_enabled() ) {
$reports['taxes'] = array(
'title' => __( 'Taxes', 'woocommerce' ),
'reports' => array(
'taxes_by_code' => array(
'title' => __( 'Taxes by code', 'woocommerce' ),
'description' => '',
'hide_title' => true,
'callback' => array( __CLASS__, 'get_report' ),
),
'taxes_by_date' => array(
'title' => __( 'Taxes by date', 'woocommerce' ),
'description' => '',
'hide_title' => true,
'callback' => array( __CLASS__, 'get_report' ),
),
),
);
}
$reports = apply_filters( 'woocommerce_admin_reports', $reports );
$reports = apply_filters( 'woocommerce_reports_charts', $reports ); // Backwards compatibility.
foreach ( $reports as $key => $report_group ) {
if ( isset( $reports[ $key ]['charts'] ) ) {
$reports[ $key ]['reports'] = $reports[ $key ]['charts'];
}
foreach ( $reports[ $key ]['reports'] as $report_key => $report ) {
if ( isset( $reports[ $key ]['reports'][ $report_key ]['function'] ) ) {
$reports[ $key ]['reports'][ $report_key ]['callback'] = $reports[ $key ]['reports'][ $report_key ]['function'];
}
}
}
return $reports;
}
/**
* Get a report from our reports subfolder.
*
* @param string $name
*/
public static function get_report( $name ) {
$name = sanitize_title( str_replace( '_', '-', $name ) );
$class = 'WC_Report_' . str_replace( '-', '_', $name );
include_once apply_filters( 'wc_admin_reports_path', 'reports/class-wc-report-' . $name . '.php', $name, $class );
if ( ! class_exists( $class ) ) {
return;
}
$report = new $class();
$report->output_report();
}
}