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'); $statuses = isset($_GET['statuses']) ? array_map('sanitize_text_field', $_GET['statuses']) : ($settings['default_statuses'] ?? array()); $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) { ?>

render_filter_form($view, $date_from, $date_to, $statuses, $per_page); ?> render_pagination_top($total_items, $total_pages, $paged); ?> render_data_table($report_data, $orderby, $order, $settings); ?>

render_reports_javascript(); ?>
render_status_checkboxes($statuses); ?>

$status_label) { $checked = in_array($status_key, $selected_statuses) ? 'checked' : ''; echo '
'; } } private function render_pagination_top($total_items, $total_pages, $paged) { ?>
1): ?> 1): ?>
db_manager->get_property_values($default_property); } ?> $name): ?> $name): ?>

$status_label) { $checked = in_array($status_key, $default_statuses) ? 'checked' : ''; echo '
'; } ?>