2o2code Spamless Forms page. */ final class AdminMenu { /** * Settings page slug. */ public const PAGE_SLUG = '2o2code-spamless-forms'; /** * Settings page renderer. * * @var SettingsPage */ private $settings_page; /** * Admin asset manager. * * @var AdminAssetManager */ private $asset_manager; /** * Registered WordPress page hook. * * @var string */ private $page_hook = ''; /** * Constructor. * * @param SettingsPage $settings_page Settings page renderer. * @param AdminAssetManager $asset_manager Admin asset manager. */ public function __construct( SettingsPage $settings_page, AdminAssetManager $asset_manager ) { $this->settings_page = $settings_page; $this->asset_manager = $asset_manager; } /** * Register admin hooks. */ public function register_hooks(): void { if ( ! function_exists( 'add_action' ) ) { return; } add_action( 'admin_menu', array( $this, 'register_menu' ) ); add_action( 'admin_enqueue_scripts', array( $this, 'maybe_enqueue_assets' ) ); } /** * Register the settings submenu page. */ public function register_menu(): void { if ( ! function_exists( 'add_options_page' ) ) { return; } $this->page_hook = (string) add_options_page( __( '2o2code Spamless Forms', '2o2code-spamless-forms' ), __( '2o2code Spamless Forms', '2o2code-spamless-forms' ), Capability::MANAGE_SETTINGS, self::PAGE_SLUG, array( $this->settings_page, 'render' ) ); } /** * Enqueue assets only on the 2o2code Spamless Forms settings page. * * @param string $hook_suffix Current admin page hook suffix. */ public function maybe_enqueue_assets( $hook_suffix ): void { if ( '' === $this->page_hook || $this->page_hook !== (string) $hook_suffix ) { return; } $this->asset_manager->enqueue(); } }