Sindbad~EG File Manager
<?php
namespace Automattic\WooCommerce\Analytics\Admin;
use Automattic\Jetpack\Assets;
use Automattic\Jetpack\Connection\Initial_State as Connection_Initial_State;
use Automattic\Jetpack\Status;
use Automattic\WooCommerce\Analytics\HelperTraits\Utilities;
use Automattic\WooCommerce\Analytics\Internal\DI\RegistrableInterface;
use Automattic\WooCommerce\Analytics\Utilities\Features;
/**
* Class Admin
*
* @package Automattic\WooCommerce\Analytics\Admin
*/
class Admin implements RegistrableInterface {
use Utilities;
/**
* We bump the assets version when the WooCommerce Analytics plugin is not compatible with the CDN assets anymore.
*
* @var string
*/
const ANALYTICS_ASSETS_VERSION = 'v1';
/**
* The cache key for the assets data.
*
* @var string
*/
const ANALYTICS_ASSETS_DATA_CACHE_KEY = 'woocommerce_analytics_assets_data';
/**
* Register our hooks.
*
* @return void
*/
public function register(): void {
// Initialize features.
Features::init();
add_action( 'admin_enqueue_scripts', array( $this, 'analytics_load_custom_wp_admin_scripts' ) );
add_action( 'admin_menu', array( $this, 'analytics_add_admin_menu_main_page' ) );
add_action( 'admin_init', array( $this, 'admin_init' ) );
if ( Features::is_enabled( 'orderAttribution' ) ) {
add_filter( 'woocommerce_analytics_report_menu_items', array( $this, 'analytics_add_report_menu_items' ) );
}
if ( Features::is_enabled( 'mvp' ) ) {
add_action( 'admin_menu', array( $this, 'analytics_add_mvp_menu_items' ) );
}
if ( Features::is_enabled( 'newAdminLayout' ) ) {
add_action( 'admin_enqueue_scripts', array( $this, 'analytics_enqueue_new_admin_layout_app' ) );
add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_sections_structure_script' ) );
}
}
/**
* Add the report menu items.
*
* @param array $report_pages The array of report menu pages.
* @return array The updated array of report menu pages.
*/
public function analytics_add_report_menu_items( $report_pages ) {
$order_attribution_report = array(
'id' => 'woocommerce-analytics-order-attribution',
'title' => __( 'Order attribution', 'woocommerce-analytics' ),
'parent' => 'woocommerce-analytics',
'path' => '/analytics/order-attribution',
'nav_args' => array(
// After "Orders" and before "Variations", 40 and 50 respectively.
'order' => 45,
'parent' => 'woocommerce-analytics',
),
);
// Insert the order attribution report after the "Orders" report and before the "Variations" report.
$found_key = array_search( 'woocommerce-analytics-variations', array_column( $report_pages, 'id' ), true );
array_splice(
$report_pages,
$found_key,
0,
array( $order_attribution_report )
);
return $report_pages;
}
/**
* Add tentative MVP reports menu items.
*
* @return void
*/
public function analytics_add_mvp_menu_items(): void {
if ( ! function_exists( 'wc_admin_register_page' ) ) {
return;
}
/**
* Filter to control the visibility of the Analytics (Dev) menu in WooCommerce Analytics.
* This menu is used for development and debugging purposes.
*
* By default, this menu is enabled/disabled based on
* the 'addDevMenu' feature flag.
* - Disabled in production.
* - Enabled in development.
*
* @since 1.0.0
*
* @param bool $show_menu Whether to show the Analytics (Dev) menu. Default is false.
*/
if ( ! apply_filters( 'wc_analytics_show_analytics_dev_menu', Features::is_enabled( 'addDevMenu' ) ) ) {
return;
}
// New Admin Layout.
if ( Features::is_enabled( 'newAdminLayout' ) ) {
$this->analytics_register_new_admin_pages();
// Bail early when the new admin layout is enabled.
return;
}
wc_admin_register_page(
array(
'id' => 'woocommerce-analytics-mvp',
'title' => __( 'Analytics (MVP)', 'woocommerce-analytics' ),
'path' => '/woocommerce-analytics/dashboard',
'icon' => 'dashicons-chart-bar',
'position' => 58,
)
);
wc_admin_register_page(
array(
'id' => 'woocommerce-analytics-dashboard',
'title' => __( 'Dashboard', 'woocommerce-analytics' ),
'parent' => 'woocommerce-analytics-mvp',
'path' => '/woocommerce-analytics/dashboard',
'nav_args' => array(
'order' => 40,
'parent' => 'woocommerce-analytics-mvp',
),
)
);
wc_admin_register_page(
array(
'id' => 'woocommerce-analytics-reports',
'title' => __( 'Reports', 'woocommerce-analytics' ),
'parent' => 'woocommerce-analytics-mvp',
'path' => '/woocommerce-analytics/reports',
'nav_args' => array(
'order' => 40,
'parent' => 'woocommerce-analytics-mvp',
),
)
);
wc_admin_register_page(
array(
'id' => 'woocommerce-analytics-orders-over-time',
'title' => __( 'Orders Over Time', 'woocommerce-analytics' ),
'parent' => 'woocommerce-analytics-mvp',
'path' => '/woocommerce-analytics/orders-over-time',
'nav_args' => array(
'order' => 40,
'parent' => 'woocommerce-analytics-mvp',
),
)
);
wc_admin_register_page(
array(
'id' => 'woocommerce-analytics-avg-order-value-over-time',
'title' => __( 'Average order value over time', 'woocommerce-analytics' ),
'parent' => 'woocommerce-analytics-mvp',
'path' => '/woocommerce-analytics/avg-order-value-over-time',
'nav_args' => array(
'order' => 40,
'parent' => 'woocommerce-analytics-mvp',
),
)
);
wc_admin_register_page(
array(
'id' => 'woocommerce-analytics-avg-items-per-order-over-time',
'title' => __( 'Average items per order over time', 'woocommerce-analytics' ),
'parent' => 'woocommerce-analytics-mvp',
'path' => '/woocommerce-analytics/avg-items-per-order-over-time',
'nav_args' => array(
'order' => 40,
'parent' => 'woocommerce-analytics-mvp',
),
)
);
}
/**
* Register the new admin pages for the new Admin Layout (MVP).
*
* @return void
*/
public function analytics_register_new_admin_pages(): void {
add_menu_page(
__( 'Analytics (MVP)', 'woocommerce-analytics' ),
__( 'Analytics (MVP)', 'woocommerce-analytics' ),
'view_woocommerce_reports',
'wc-analytics',
array( $this, 'render_admin_layout_container' ),
'dashicons-chart-bar',
58
);
// Dashboard.
add_submenu_page(
'wc-analytics',
__( 'Analytics Dashboard', 'woocommerce-analytics' ),
__( 'Dashboard', 'woocommerce-analytics' ),
'view_woocommerce_reports',
'wc-analytics/dashboard',
array( $this, 'render_admin_layout_container' )
);
// Reports.
add_submenu_page(
'wc-analytics',
__( 'Analytics Reports', 'woocommerce-analytics' ),
__( 'All Reports', 'woocommerce-analytics' ),
'view_woocommerce_reports',
'wc-analytics/reports',
array( $this, 'render_admin_layout_container' ),
);
// Reports > All Reports.
add_submenu_page(
'woocommerce-analytics-reports.php', // Hack to make the page hidden from the menu.
__( 'Reports / All', 'woocommerce-analytics' ),
__( 'All reports', 'woocommerce-analytics' ),
'view_woocommerce_reports',
'wc-analytics/reports/all',
array( $this, 'render_admin_layout_container' ),
);
// Reports > Finances.
add_submenu_page(
'woocommerce-analytics-reports.php', // Hack to make the page hidden from the menu.
__( 'Reports / Finances', 'woocommerce-analytics' ),
__( 'Finances', 'woocommerce-analytics' ),
'view_woocommerce_reports',
'wc-analytics/reports/finances',
array( $this, 'render_admin_layout_container' ),
);
// Reports > Inventory.
add_submenu_page(
'woocommerce-analytics-reports.php', // Hack to make the page hidden from the menu.
__( 'Reports / Inventory', 'woocommerce-analytics' ),
__( 'Inventory', 'woocommerce-analytics' ),
'view_woocommerce_reports',
'wc-analytics/reports/inventory',
array( $this, 'render_admin_layout_container' ),
);
// Reports > Orders.
add_submenu_page(
'woocommerce-analytics-reports.php', // Hack to make the page hidden from the menu.
__( 'Reports / Orders', 'woocommerce-analytics' ),
__( 'Orders', 'woocommerce-analytics' ),
'view_woocommerce_reports',
'wc-analytics/reports/orders',
array( $this, 'render_admin_layout_container' ),
);
// Reports > Orders > Orders Over Time.
add_submenu_page(
'woocommerce-analytics-orders-reports.php', // Hack to make the page hidden from the menu.
__( 'Orders over time', 'woocommerce-analytics' ),
__( 'Orders over time', 'woocommerce-analytics' ),
'view_woocommerce_reports',
'wc-analytics/reports/orders/orders-over-time',
array( $this, 'render_admin_layout_container' ),
);
// Reports > Orders > Average Order Value Over Time.
add_submenu_page(
'woocommerce-analytics-orders-reports.php', // Hack to make the page hidden from the menu.
__( 'Average order value over time', 'woocommerce-analytics' ),
__( 'Average order value over time', 'woocommerce-analytics' ),
'view_woocommerce_reports',
'wc-analytics/reports/orders/avg-order-value-over-time',
array( $this, 'render_admin_layout_container' ),
);
// Reports > Orders > Average Items Per Order Over Time.
add_submenu_page(
'woocommerce-analytics-orders-reports.php', // Hack to make the page hidden from the menu.
__( 'Average items per order over time', 'woocommerce-analytics' ),
__( 'Average items per order over time', 'woocommerce-analytics' ),
'view_woocommerce_reports',
'wc-analytics/reports/orders/avg-items-per-order-over-time',
array( $this, 'render_admin_layout_container' ),
);
// Reports > Sales.
add_submenu_page(
'woocommerce-analytics-reports.php', // Hack to make the page hidden from the menu.
__( 'Reports / Sales', 'woocommerce-analytics' ),
__( 'Sales', 'woocommerce-analytics' ),
'view_woocommerce_reports',
'wc-analytics/reports/sales',
array( $this, 'render_admin_layout_container' ),
);
// Reports > Sales -> Sales by channel.
add_submenu_page(
'woocommerce-analytics-sales-reports.php', // Hack to make the page hidden from the menu.
__( 'Sales by channel', 'woocommerce-analytics' ),
__( 'Sales by channel', 'woocommerce-analytics' ),
'view_woocommerce_reports',
'wc-analytics/reports/sales/channels',
array( $this, 'render_admin_layout_container' ),
);
// Reports > Sales -> Sales by sources.
add_submenu_page(
'woocommerce-analytics-sales-reports.php', // Hack to make the page hidden from the menu.
__( 'Sales by sources', 'woocommerce-analytics' ),
__( 'Sales by sources', 'woocommerce-analytics' ),
'view_woocommerce_reports',
'wc-analytics/reports/sales/sources',
array( $this, 'render_admin_layout_container' ),
);
// Reports > Sales -> Sales by campaign.
add_submenu_page(
'woocommerce-analytics-sales-reports.php', // Hack to make the page hidden from the menu.
__( 'Sales by campaign', 'woocommerce-analytics' ),
__( 'Sales by campaign', 'woocommerce-analytics' ),
'view_woocommerce_reports',
'wc-analytics/reports/sales/campaigns',
array( $this, 'render_admin_layout_container' ),
);
// Reports > Sales -> Sales by devices.
add_submenu_page(
'woocommerce-analytics-sales-reports.php', // Hack to make the page hidden from the menu.
__( 'Sales by devices', 'woocommerce-analytics' ),
__( 'Sales by devices', 'woocommerce-analytics' ),
'view_woocommerce_reports',
'wc-analytics/reports/sales/devices',
array( $this, 'render_admin_layout_container' ),
);
// Reports > Sales -> Sales by channel+sources.
add_submenu_page(
'woocommerce-analytics-sales-reports.php', // Hack to make the page hidden from the menu.
__( 'Sales by channel + sources', 'woocommerce-analytics' ),
__( 'Sales by channel + sources', 'woocommerce-analytics' ),
'view_woocommerce_reports',
'wc-analytics/reports/sales/channels-sources',
array( $this, 'render_admin_layout_container' ),
);
// Settings.
add_submenu_page(
'wc-analytics',
__( 'Settings', 'woocommerce-analytics' ),
__( 'Settings', 'woocommerce-analytics' ),
'view_woocommerce_reports',
'wc-analytics/settings',
array( $this, 'render_admin_layout_container' )
);
}
/**
* Render the element placeholder for the admin page.
* It will be replaced by the React app.
*/
public function render_admin_layout_container(): void {
?>
<div id="wc-analytics-admin-app" class="wc-analytics-admin-app admin-app wc-analytics-admin-app-loading">
<?php esc_html_e( 'Loading…', 'woocommerce-analytics' ); ?>
</div>
<?php
}
/**
* Add the admin menu.
*
* @return void
*/
public function analytics_add_admin_menu_main_page(): void {
if ( ! function_exists( 'wc_admin_register_page' ) ) {
return;
}
/**
* Filter to control the visibility of the Analytics (Dev) menu in WooCommerce Analytics.
* This menu is used for development and debugging purposes.
*
* By default, this menu is enabled/disabled based on
* the 'addDevMenu' feature flag.
* - Disabled in production.
* - Enabled in development.
*
* @since 1.0.0
*
* @param bool $show_menu Whether to show the Analytics (Dev) menu. Default is false.
*/
if ( ! apply_filters( 'wc_analytics_show_analytics_dev_menu', Features::is_enabled( 'addDevMenu' ) ) ) {
return;
}
wc_admin_register_page(
array(
'id' => 'woocommerce-analytics',
'title' => __( 'Analytics (Dev)', 'woocommerce-analytics' ),
'path' => '/woocommerce-analytics/settings',
'icon' => 'dashicons-chart-bar',
'position' => 58, // After Marketing page.
)
);
wc_admin_register_page(
array(
'id' => 'woocommerce-analytics-settings',
'title' => __( 'Settings', 'woocommerce-analytics' ),
'parent' => 'woocommerce-analytics',
'path' => '/woocommerce-analytics/settings',
'nav_args' => array(
'order' => 20,
'parent' => 'woocommerce-analytics',
),
)
);
wc_admin_register_page(
array(
'id' => 'woocommerce-analytics-connect-your-store',
'title' => __( 'Connect your store', 'woocommerce-analytics' ),
'parent' => 'woocommerce-analytics',
'path' => '/woocommerce-analytics/connect-your-store',
'nav_args' => array(
'order' => 30,
'parent' => 'woocommerce-analytics',
),
)
);
}
/**
* Check if the current page is a new admin layout page.
*
* @param string $hook The hook name of the page.
* @return bool
*/
public function is_new_admin_layout_page( $hook ) {
$new_admin_pages = array(
'toplevel_page_wc-analytics',
'analytics-mvp_page_wc-analytics/dashboard',
'analytics-mvp_page_wc-analytics/reports',
'admin_page_wc-analytics/reports/all',
'admin_page_wc-analytics/reports/finances',
'admin_page_wc-analytics/reports/inventory',
'admin_page_wc-analytics/reports/orders',
'admin_page_wc-analytics/reports/orders/orders-over-time',
'admin_page_wc-analytics/reports/orders/avg-order-value-over-time',
'admin_page_wc-analytics/reports/orders/avg-items-per-order-over-time',
'admin_page_wc-analytics/reports/sales',
'admin_page_wc-analytics/reports/sales/channels',
'admin_page_wc-analytics/reports/sales/sources',
'admin_page_wc-analytics/reports/sales/campaigns',
'admin_page_wc-analytics/reports/sales/devices',
'admin_page_wc-analytics/reports/sales/channels-sources',
'analytics-mvp_page_wc-analytics/settings',
);
return in_array( $hook, $new_admin_pages, true );
}
/**
* Load the admin script.
*
* @param string $hook The hook name of the page.
*/
public function analytics_load_custom_wp_admin_scripts( $hook ): void {
if (
'woocommerce_page_wc-admin' !== $hook && // WooCommerce Admin pages.
! $this->is_new_admin_layout_page( $hook ) // Analytics pages.
) {
return;
}
if ( $this->is_asset_local( 'index.js' ) ) {
// Load local assets for the convenience of development.
Assets::register_script(
'analytics-main-app',
'index.js',
$this->get_local_build_path() . 'index.js',
array(
'enqueue' => true,
'in_footer' => true,
'textdomain' => 'woocommerce-analytics',
)
);
Assets::enqueue_script( 'analytics-main-app' );
// Add Jetpack offline mode status to window object for local development.
wp_add_inline_script(
'analytics-main-app',
'window.wcAnalyticsJetpackStatus = ' . wp_json_encode(
array(
'isOfflineMode' => ( new Status() )->is_offline_mode(),
),
JSON_HEX_TAG | JSON_UNESCAPED_SLASHES
) . ';',
'before'
);
} else {
// Get the CDN URL for the assests.
$build_dir = $this->get_cdn_url( self::ANALYTICS_ASSETS_VERSION );
// Try to get cached assets data.
$assets_data = get_transient( self::ANALYTICS_ASSETS_DATA_CACHE_KEY );
if ( false === $assets_data || ! is_array( $assets_data ) || ! isset( $assets_data['dependencies'] ) || ! isset( $assets_data['version'] ) || ! is_array( $assets_data['dependencies'] ) ) {
// Dynamically get the dependencies and version from the CDN.
$assets_data = $this->get_assets_data( $build_dir );
set_transient( self::ANALYTICS_ASSETS_DATA_CACHE_KEY, $assets_data, 15 * MINUTE_IN_SECONDS );
}
$dependencies = $assets_data['dependencies'];
// We add &minify=false to the version to prevent minification from the CDN.
// The file is already minified in the build process and the additional minification was causing issues.
$version = $assets_data['version'] . '&minify=false';
// Enqueue CSS dependencies.
foreach ( $dependencies as $style ) {
wp_enqueue_style( $style );
}
// Load our app.js.
wp_register_script(
'analytics-main-app',
$build_dir . 'index.js',
$dependencies,
$version,
true
);
wp_enqueue_script( 'analytics-main-app' );
// Load our style.css.
wp_register_style(
'analytics-main-app',
$build_dir . 'index.css',
array(),
$version
);
wp_enqueue_style( 'analytics-main-app' );
}
Connection_Initial_State::render_script( 'analytics-main-app' );
/*
* Manually point to the translation file.
*
* Since the JS script is loaded externally WP will not be looking for the translation file locally.
* The .json file generated by GlotPress is delivered with the plugin Language Pack and
* it is available in the standard translations directory.
*
*/
add_filter(
'load_script_translation_file',
function ( $file, $handle, $domain ) {
if ( 'analytics-main-app' !== $handle ) {
return $file;
}
return WP_LANG_DIR . '/plugins/' . $domain . '-' . determine_locale() . '-' . md5( 'build/index.js' ) . '.json';
},
10,
3
);
// Set translation file.
wp_set_script_translations( 'analytics-main-app', 'woocommerce-analytics' );
}
/**
* Enqueue the new admin layout app.
*
* @param string $hook The hook name of the page.
* @return void
*/
public function analytics_enqueue_new_admin_layout_app( $hook ): void {
if ( ! $this->is_new_admin_layout_page( $hook ) ) {
return;
}
// Adding `is-fullscreen-mode` class to the body.
add_filter(
'admin_body_class',
static function ( $classes ) {
return "$classes is-fullscreen-mode woocommerce-analytics";
}
);
Assets::register_script(
'analytics-admin-app',
'admin-app.js',
$this->get_local_build_path() . 'admin-app.js',
array(
'enqueue' => true,
'in_footer' => true,
'textdomain' => 'woocommerce-analytics',
)
);
Assets::enqueue_script( 'analytics-admin-app' );
}
/**
* Get the structure of pages/menus for the WooCommerce Analytics section.
*
* @return array The filtered menu structure.
*/
public function get_wc_analytics_sections_structure(): array {
global $menu, $submenu;
$analytics_menu = array();
// Orders categories.
$orders_categories = array(
'slug' => 'orders',
'name' => __( 'Orders', 'woocommerce-analytics' ),
);
// Sales categories.
$sales_categories = array(
'slug' => 'sales',
'name' => __( 'Sales', 'woocommerce-analytics' ),
);
/*
* Map with extra data for the WooCommerce Analytics menu items.
* - icon: The icon ID for the menu item.
* - addToPalette: Whether to add the icon to the Command Palette.
*/
$extras = array(
'wc-analytics/dashboard' => array(
'icon' => 'wordpress/navigation',
'addToPalette' => true,
),
'wc-analytics/reports' => array(
'icon' => 'wc-analytics/reports',
'addToPalette' => true,
),
'wc-analytics/reports/all' => array(
'icon' => 'wc-analytics/reports',
'addToPalette' => true,
),
'wc-analytics/reports/finances' => array(
'icon' => 'wordpress/payment',
'addToPalette' => true,
),
'wc-analytics/reports/inventory' => array(
'icon' => 'wordpress/tag',
'addToPalette' => true,
),
// Orders.
'wc-analytics/reports/orders' => array(
'icon' => 'wordpress/receipt',
'addToPalette' => true,
),
// Orders -> Orders over time.
'wc-analytics/reports/orders/orders-over-time' => array(
'icon' => 'wordpress/receipt',
'category' => $orders_categories,
'author' => 'WooCommerce',
'addToPalette' => true,
'showInSidebar' => false,
'viewParam' => 'orders_no',
),
// Orders -> Avg order value over time.
'wc-analytics/reports/orders/avg-order-value-over-time' => array(
'icon' => 'wordpress/receipt',
'category' => $orders_categories,
'author' => 'WooCommerce',
'addToPalette' => true,
'showInSidebar' => false,
'viewParam' => 'average_order_value',
),
// Orders -> Avg items per order over time.
'wc-analytics/reports/orders/avg-items-per-order-over-time' => array(
'icon' => 'wordpress/receipt',
'category' => $orders_categories,
'author' => 'WooCommerce',
'addToPalette' => true,
'showInSidebar' => false,
'viewParam' => 'avg_items',
),
// Sales.
'wc-analytics/reports/sales' => array(
'icon' => 'wc-analytics/bag',
'addToPalette' => true,
),
// Sales -> Sales by channel.
'wc-analytics/reports/sales/channels' => array(
'icon' => 'wc-analytics/bag',
'category' => $sales_categories,
'addToPalette' => true,
'author' => 'WooCommerce',
'viewParam' => 'channel',
),
// Sales -> Sales by sources.
'wc-analytics/reports/sales/sources' => array(
'icon' => 'wc-analytics/bag',
'category' => $sales_categories,
'addToPalette' => true,
'author' => 'WooCommerce',
'viewParam' => 'source',
),
// Sales -> Sales by campaign.
'wc-analytics/reports/sales/campaigns' => array(
'icon' => 'wc-analytics/bag',
'category' => $sales_categories,
'addToPalette' => true,
'author' => 'WooCommerce',
'viewParam' => 'campaign',
),
// Sales -> Sales by devices.
'wc-analytics/reports/sales/devices' => array(
'icon' => 'wc-analytics/bag',
'category' => $sales_categories,
'addToPalette' => true,
'author' => 'WooCommerce',
'viewParam' => 'device',
),
// Sales -> Sales by channel + sources.
'wc-analytics/reports/sales/channels-sources' => array(
'icon' => 'wc-analytics/bag',
'category' => $sales_categories,
'addToPalette' => true,
'author' => 'WooCommerce',
'viewParam' => 'channel-source',
),
'wc-analytics/settings' => array(
'icon' => 'wordpress/cog',
'addToPalette' => true,
),
);
/*
* Create Reports subsections,
* based on the `woocommerce-analytics-reports.php` slug
*/
$reports_orders_subsections = array();
if ( isset( $submenu['woocommerce-analytics-orders-reports.php'] ) ) {
foreach ( $submenu['woocommerce-analytics-orders-reports.php'] as $item ) {
$extra = isset( $extras[ $item[2] ] ) ? $extras[ $item[2] ] : array();
$reports_orders_subsections[] = array(
'title' => $item[0],
'path' => $item[2],
'iconId' => $extra['icon'] ?? '',
'addToPalette' => $extra['addToPalette'] ?? false,
'showInSidebar' => $extra['showInSidebar'] ?? true,
'category' => $extra['category'] ?? '',
'author' => $extra['author'] ?? '',
'viewParam' => $extra['viewParam'] ?? '',
);
}
}
$reports_sales_subsections = array();
if ( isset( $submenu['woocommerce-analytics-sales-reports.php'] ) ) {
foreach ( $submenu['woocommerce-analytics-sales-reports.php'] as $item ) {
$extra = isset( $extras[ $item[2] ] ) ? $extras[ $item[2] ] : array();
$reports_sales_subsections[] = array(
'title' => $item[0],
'path' => $item[2],
'iconId' => $extra['icon'] ?? '',
'addToPalette' => $extra['addToPalette'] ?? false,
'showInSidebar' => $extra['showInSidebar'] ?? true,
'category' => $extra['category'] ?? '',
'author' => $extra['author'] ?? '',
'viewParam' => $extra['viewParam'] ?? '',
);
}
}
$reports_subsections = array();
if ( isset( $submenu['woocommerce-analytics-reports.php'] ) ) {
foreach ( $submenu['woocommerce-analytics-reports.php'] as $item ) {
$extra = isset( $extras[ $item[2] ] ) ? $extras[ $item[2] ] : array();
$report = array(
'title' => $item[0],
'path' => $item[2],
'iconId' => $extra['icon'] ?? '',
'addToPalette' => $extra['addToPalette'] ?? false,
'showInSidebar' => $extra['showInSidebar'] ?? true,
'subsections' => array(),
);
// Populate the reports orders subsections.
if ( 'wc-analytics/reports/orders' === $item[2] ) {
$report['subsections'] = $reports_orders_subsections;
}
// Populate the reports sales subsections.
if ( 'wc-analytics/reports/sales' === $item[2] ) {
$report['subsections'] = $reports_sales_subsections;
}
array_push( $reports_subsections, $report );
}
}
foreach ( $menu as $item ) {
// Only iterate over the WooCommerce Analytics menu.
if ( 'wc-analytics' === $item[2] ) {
$analytics_menu['home'] = array(
'title' => $item[0],
'path' => $item[2],
'iconId' => $item[6],
);
break;
}
}
// Get the sub-sections of the 'wc-analytics' menu.
if ( isset( $submenu['wc-analytics'] ) ) {
$analytics_menu['sections'] = array();
foreach ( $submenu['wc-analytics'] as $item ) {
$extra = isset( $extras[ $item[2] ] ) ? $extras[ $item[2] ] : array();
$section = array(
'title' => $item[0],
'path' => $item[2],
'iconId' => $extra['icon'] ?? '',
'addToPalette' => $extra['addToPalette'] ?? false,
);
if ( 'wc-analytics/reports' === $item[2] ) {
$section['subsections'] = $reports_subsections;
}
$analytics_menu['sections'][] = $section;
}
}
return $analytics_menu;
}
/**
* Enqueue the sections structure as a client global variable.
*
* @param string $hook The hook name of the page.
* @return void
*/
public function enqueue_sections_structure_script( $hook ): void {
if ( ! $this->is_new_admin_layout_page( $hook ) ) {
return;
}
// Get the menu structure.
$menu_structure = $this->get_wc_analytics_sections_structure();
// Add the default section, which is the dashboard.
$menu_json = wp_json_encode( $menu_structure, JSON_HEX_TAG | JSON_UNESCAPED_SLASHES );
wp_add_inline_script(
'analytics-admin-app', // Enqueue for the new admin layout app.
"window.wcAnalyticsSections = {$menu_json};",
'before'
);
}
/**
* Admin init function.
*
* Runs on the admin init hook.
*
* @return void
*/
public function admin_init(): void {
// Run post-activation actions if needed.
$this->plugin_post_activation();
}
/**
* Run plugin post-activation actions if we need to.
*
* @return void
*/
private function plugin_post_activation(): void {
if ( get_transient( 'activated_woocommerce_analytics' ) ) {
delete_transient( 'activated_woocommerce_analytics' );
$redirect_url = admin_url( 'admin.php?page=wc-admin&path=%2Fanalytics%2Forder-attribution' );
wp_safe_redirect( $redirect_url );
exit();
}
}
}
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists