container = $container; } /** * Register hooks. * * @return void */ public function register() { add_action( 'admin_menu', array( $this, 'register_menu' ), 50 ); add_action( 'admin_init', array( $this, 'ensure_admin_schedule_module' ), 20 ); // Existing scheduling logic remains untouched in includes/functions-hours.php. } /** * Ensure scheduling admin controller is ready. * * @return void */ public function ensure_admin_schedule_module() { if ( function_exists( 'abct_get_admin_schedule_module' ) ) { abct_get_admin_schedule_module(); } } /** * Register scheduling editor page in admin. * * @return void */ public function register_menu() { $capability = current_user_can( 'manage_woocommerce' ) ? 'manage_woocommerce' : 'manage_options'; if ( ! current_user_can( $capability ) ) { return; } $parent_slug = 'abct-smart-orders'; if ( $this->has_submenu( $parent_slug, 'abct-edit-schedule' ) ) { return; } add_submenu_page( $parent_slug, __( 'Store Schedule', 'abct-smart-orders' ), __( 'Store Schedule', 'abct-smart-orders' ), $capability, 'abct-edit-schedule', array( $this, 'render_schedule_page' ) ); } /** * Check if submenu slug is already registered under parent. * * @param string $parent_slug Parent menu slug. * @param string $menu_slug Submenu slug. * @return bool */ private function has_submenu( $parent_slug, $menu_slug ) { global $submenu; $parent_slug = (string) $parent_slug; $menu_slug = (string) $menu_slug; if ( '' === $parent_slug || '' === $menu_slug || empty( $submenu[ $parent_slug ] ) || ! is_array( $submenu[ $parent_slug ] ) ) { return false; } foreach ( $submenu[ $parent_slug ] as $item ) { if ( ! is_array( $item ) || empty( $item[2] ) ) { continue; } if ( $menu_slug === (string) $item[2] ) { return true; } } return false; } /** * Render scheduling page callback. * * @return void */ public function render_schedule_page() { try { $this->ensure_admin_schedule_module(); if ( function_exists( 'abct_render_settings_page' ) ) { abct_render_settings_page(); return; } } catch ( Throwable $e ) { error_log( '[ABCT Smart Orders] Scheduling UI render error: ' . $e->getMessage() ); } echo '

' . esc_html__( 'Scheduling', 'abct-smart-orders' ) . '

' . esc_html__( 'Scheduling editor is temporarily unavailable.', 'abct-smart-orders' ) . '

'; } }