db_manager = $db_manager; $this->settings_manager = $settings_manager; } public function add_admin_menu() { // Add Custom Reports page under WooCommerce > Reports add_submenu_page( 'woocommerce', __('Custom Reports', StudiouWC_Main::get_text_domain()), __('Custom Reports', StudiouWC_Main::get_text_domain()), 'manage_woocommerce', 'studiou-custom-reports', array($this, 'display_custom_reports_page') ); // Add Settings page under WooCommerce > Reports Settings add_submenu_page( 'woocommerce', __('Custom Report Settings', StudiouWC_Main::get_text_domain()), __('Custom Report Settings', StudiouWC_Main::get_text_domain()), 'manage_woocommerce', 'studiou-reports-settings', array($this, 'display_settings_page') ); } public function enqueue_admin_scripts($hook) { if (strpos($hook, 'studiou-') !== false) { wp_enqueue_script('jquery'); wp_enqueue_script('jquery-ui-datepicker'); wp_enqueue_style('jquery-ui-datepicker', 'https://code.jquery.com/ui/1.12.1/themes/ui-lightness/jquery-ui.css'); } } public function display_custom_reports_page() { $settings = $this->settings_manager->get_settings(); // Handle form submission $view = isset($_GET['view']) ? sanitize_text_field($_GET['view']) : 'product_categories_summary'; $date_from = isset($_GET['date_from']) ? sanitize_text_field($_GET['date_from']) : $this->settings_manager->get_default_date_from(); $date_to = isset($_GET['date_to']) ? sanitize_text_field($_GET['date_to']) : date('Y-m-d'); // If no statuses selected, use all available statuses (including custom ones) if (isset($_GET['statuses']) && !empty($_GET['statuses'])) { $statuses = array_map('sanitize_text_field', $_GET['statuses']); } else { $default_statuses = $settings['default_statuses'] ?? array(); if (empty($default_statuses)) { // Include common statuses + your custom status $statuses = array('wc-completed', 'wc-processing', 'wc-on-hold', 'wc-to-print'); } else { $statuses = $default_statuses; } } $per_page = isset($_GET['per_page']) ? intval($_GET['per_page']) : 20; $paged = isset($_GET['paged']) ? intval($_GET['paged']) : 1; $orderby = isset($_GET['orderby']) ? sanitize_text_field($_GET['orderby']) : 'category'; $order = isset($_GET['order']) ? sanitize_text_field($_GET['order']) : 'ASC'; // Get report data $report_data = $this->db_manager->get_product_categories_summary($date_from, $date_to, $statuses, $per_page, $paged, $orderby, $order); $total_items = $this->db_manager->get_total_items($date_from, $date_to, $statuses); $total_pages = ceil($total_items / $per_page); $this->render_reports_page($view, $date_from, $date_to, $statuses, $per_page, $paged, $orderby, $order, $report_data, $total_items, $total_pages, $settings); } public function display_settings_page() { $settings = $this->settings_manager->get_settings(); $this->render_settings_page($settings); } private function render_reports_page($view, $date_from, $date_to, $statuses, $per_page, $paged, $orderby, $order, $report_data, $total_items, $total_pages, $settings) { ?>
| $name): ?> | |||
|---|---|---|---|
| $name): ?> |