container = $container; } /** * Register module hooks. * * @return void */ public function register() { add_action( 'admin_menu', array( $this, 'register_root_menu' ), 5 ); add_action( 'admin_menu', array( $this, 'register_schedule_submenu' ), 50 ); add_action( 'admin_menu', array( $this, 'register_support_submenu' ), 90 ); } /** * Resolve admin capability. * * @return string */ private function get_admin_capability() { return current_user_can( 'manage_woocommerce' ) ? 'manage_woocommerce' : 'manage_options'; } /** * Register root menu. * * @return void */ public function register_root_menu() { add_menu_page( __( 'Smart Orders', 'abct-smart-orders' ), __( 'Smart Orders', 'abct-smart-orders' ), $this->get_admin_capability(), 'abct-smart-orders', array( $this, 'render_smart_orders_root' ), 'dashicons-store', 56 ); } /** * Register schedule submenu. * * @return void */ public function register_schedule_submenu() { $parent = 'abct-smart-orders'; $capability = $this->get_admin_capability(); if ( ! $this->has_submenu( $parent, 'abct-edit-schedule' ) ) { add_submenu_page( $parent, __( 'Store Schedule', 'abct-smart-orders' ), __( 'Store Schedule', 'abct-smart-orders' ), $capability, 'abct-edit-schedule', array( $this, 'render_schedule_page' ) ); } } /** * Register support submenu. * * @return void */ public function register_support_submenu() { $parent = 'abct-smart-orders'; $capability = $this->get_admin_capability(); if ( ! $this->has_submenu( $parent, 'abct-support' ) ) { add_submenu_page( $parent, __( 'Support', 'abct-smart-orders' ), __( 'Support', 'abct-smart-orders' ), $capability, 'abct-support', array( $this, 'render_support_page' ) ); } } /** * Check if submenu slug exists. * * @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 Smart Orders Free dashboard. * * @return void */ public function render_smart_orders_root() { if ( ! current_user_can( $this->get_admin_capability() ) ) { return; } $state = function_exists( 'abct_get_store_state' ) ? abct_get_store_state() : 'unknown'; $is_open = function_exists( 'abct_is_store_open' ) ? abct_is_store_open() : false; $next_opening = function_exists( 'abct_get_scheduler' ) ? abct_get_scheduler()->get_next_opening_label() : ''; ?>

get_admin_capability() ) ) { return; } ?>

' . esc_html__( 'Store Schedule', 'abct-smart-orders' ) . '

' . esc_html__( 'Schedule page is temporarily unavailable.', 'abct-smart-orders' ) . '

'; } /** * Render schedule page using existing free scheduling callbacks. * * @return void */ public function render_schedule_page() { if ( function_exists( 'abct_render_settings_page' ) ) { abct_render_settings_page(); return; } if ( function_exists( 'abct_get_admin_schedule_module' ) ) { $module = abct_get_admin_schedule_module(); if ( is_object( $module ) && method_exists( $module, 'render_page' ) ) { $module->render_page(); return; } } $this->render_schedule_fallback(); } }