label. * * Pro may append tabs via `aksmb_admin_tabs` (e.g. Price History). * * @return array */ public static function all() { $tabs = array( self::DASHBOARD => __( 'Dashboard', 'marginbeacon' ), self::COST_SETUP => __( 'Cost Setup', 'marginbeacon' ), self::PREFLIGHT => __( 'Preflight', 'marginbeacon' ), self::FINDINGS => __( 'Findings / Order Risks', 'marginbeacon' ), self::SETTINGS => __( 'Settings', 'marginbeacon' ), self::HELP => __( 'Help', 'marginbeacon' ), self::LICENSE => DistributionChannel::is_direct() ? __( 'Direct Edition', 'marginbeacon' ) : __( 'Pro / License', 'marginbeacon' ), ); /** * Filter MarginBeacon admin tabs (slug => label). * * @param array $tabs Tabs. */ $filtered = apply_filters( 'aksmb_admin_tabs', $tabs ); return is_array( $filtered ) ? $filtered : $tabs; } /** * Current tab from request. * * @return string */ public static function current() { $tab = isset( $_GET['tab'] ) ? sanitize_key( wp_unslash( $_GET['tab'] ) ) : self::DASHBOARD; // phpcs:ignore WordPress.Security.NonceVerification.Recommended $all = self::all(); return isset( $all[ $tab ] ) ? $tab : self::DASHBOARD; } /** * Build admin URL for a tab. * * @param string $tab Tab slug. * @param array $args Extra query args. * @return string */ public static function url( $tab, array $args = array() ) { $all = self::all(); if ( ! isset( $all[ $tab ] ) ) { $tab = self::DASHBOARD; } $query = array_merge( array( 'page' => 'marginbeacon', 'tab' => $tab, ), $args ); return add_query_arg( $query, admin_url( 'admin.php' ) ); } /** * Legacy page slug → tab. * * @return array */ public static function legacy_map() { return array( 'marginbeacon-cost-setup' => self::COST_SETUP, 'marginbeacon-preflight' => self::PREFLIGHT, 'marginbeacon-settings' => self::SETTINGS, ); } /** * Prevent instantiation. */ private function __construct() {} }