boot(); } return self::$agenli_instance; } private function boot() { if ( '1' === get_option( 'agenli_flush_rewrite' ) ) { AGENLI_Sitemap::register_rewrites(); AGENLI_LLMS::register_rewrites(); delete_option( 'agenli_flush_rewrite' ); flush_rewrite_rules(); } add_action( 'admin_menu', array( $this, 'register_menu' ) ); add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_assets' ) ); add_action( 'wp_enqueue_scripts', array( $this, 'frontend' ) ); add_action( 'wp_ajax_agenli_save_settings', array( $this, 'ajax_save_settings' ) ); add_action( 'wp_ajax_agenli_export_leads', array( 'AGENLI_Leads', 'export_csv' ) ); add_action( 'wp_ajax_nopriv_agenli_capture_lead', array( 'AGENLI_Leads', 'capture' ) ); add_action( 'wp_ajax_agenli_capture_lead', array( 'AGENLI_Leads', 'capture' ) ); add_action( 'wp_ajax_agenli_generate_sitemap', array( 'AGENLI_Sitemap', 'ajax_generate' ) ); add_action( 'wp_ajax_agenli_save_robots', array( 'AGENLI_Robots', 'ajax_save' ) ); add_action( 'wp_ajax_agenli_reset_robots', array( 'AGENLI_Robots', 'ajax_reset' ) ); add_action( 'wp_ajax_agenli_generate_llms', array( 'AGENLI_LLMS', 'ajax_generate' ) ); AGENLI_Analytics::init(); AGENLI_Leads::init(); AGENLI_SEO::init(); AGENLI_Sitemap::init(); AGENLI_Robots::init(); AGENLI_LLMS::init(); AGENLI_Schema::init(); } public function register_menu() { add_menu_page( 'AgencyBoost', 'AgencyBoost', 'manage_options', 'agencyboost', 'agenli_page_dashboard', 'dashicons-star-filled', 30 ); add_submenu_page( 'agencyboost', 'Dashboard', 'Dashboard', 'manage_options', 'agencyboost', 'agenli_page_dashboard' ); add_submenu_page( 'agencyboost', 'On-Page SEO', 'On-Page SEO', 'manage_options', 'agenli-seo', 'agenli_page_seo' ); add_submenu_page( 'agencyboost', 'Sitemap', 'Sitemap', 'manage_options', 'agenli-sitemap', 'agenli_page_sitemap' ); add_submenu_page( 'agencyboost', 'Robots.txt', 'Robots.txt', 'manage_options', 'agenli-robots', 'agenli_page_robots' ); add_submenu_page( 'agencyboost', 'Lead Capture', 'Lead Capture', 'manage_options', 'agenli-leads', 'agenli_page_leads' ); add_submenu_page( 'agencyboost', 'AI Content', 'AI Content 🔒', 'manage_options', 'agenli-ai-content', 'agenli_page_pro_feature' ); add_submenu_page( 'agencyboost', 'Keyword Intel', 'Keyword Intel 🔒', 'manage_options', 'agenli-keyword', 'agenli_page_pro_feature' ); add_submenu_page( 'agencyboost', 'Analytics', 'Analytics 🔒', 'manage_options', 'agenli-analytics', 'agenli_page_pro_feature' ); add_submenu_page( 'agencyboost', 'Local SEO', 'Local SEO 🔒', 'manage_options', 'agenli-local-seo', 'agenli_page_pro_feature' ); add_submenu_page( 'agencyboost', 'PDF Reports', 'PDF Reports 🔒', 'manage_options', 'agenli-reports', 'agenli_page_pro_feature' ); add_submenu_page( 'agencyboost', 'LLMs.txt', 'LLMs.txt 🔒', 'manage_options', 'agenli-llms', 'agenli_page_llms' ); add_submenu_page( 'agencyboost', 'Schema Markup', 'Schema Markup 🔒', 'manage_options', 'agenli-schema', 'agenli_page_schema' ); add_submenu_page( 'agencyboost', 'AI Providers', 'AI Providers 🔒', 'manage_options', 'agenli-ai-providers', 'agenli_page_pro_feature' ); add_submenu_page( 'agencyboost', 'Email / SMTP', 'Email / SMTP 🔒', 'manage_options', 'agenli-email', 'agenli_page_pro_feature' ); add_submenu_page( 'agencyboost', 'Analytics Setup', 'Analytics Setup', 'manage_options', 'agenli-analytics-setup', 'agenli_page_analytics_setup' ); add_submenu_page( 'agencyboost', 'License', 'License', 'manage_options', 'agenli-license', 'agenli_page_license' ); add_submenu_page( 'agencyboost', 'Import / Migrate', 'Import / Migrate', 'manage_options', 'agenli-import', 'agenli_page_import' ); add_submenu_page( 'agencyboost', 'Upgrade to Pro', '⭐ Upgrade', 'manage_options', 'agenli-upgrade', 'agenli_page_upgrade' ); } public function enqueue_assets( $hook ) { $screen = get_current_screen(); $on_plugin_page = ( false !== strpos( $hook, 'agencyboost' ) || false !== strpos( $hook, 'agenli-' ) ); $on_post_page = ( $screen && 'post' === $screen->base ); if ( ! $on_plugin_page && ! $on_post_page ) return; wp_enqueue_style( 'agenli-admin', AGENLI_URL . 'admin/css/admin.css', array(), AGENLI_VERSION ); wp_enqueue_script( 'agenli-admin', AGENLI_URL . 'admin/js/admin.js', array( 'jquery' ), AGENLI_VERSION, true ); wp_localize_script( 'agenli-admin', 'AGENLI', array( 'ajax' => admin_url( 'admin-ajax.php' ), 'nonce' => wp_create_nonce( 'agenli_nonce' ), 'is_pro' => 'no', 'version' => AGENLI_VERSION, 'saved' => 'Saved!', 'error' => 'Error saving.', ) ); } public function frontend() { if ( agenli_get_option( 'popup_enabled', '0' ) !== '1' ) return; wp_enqueue_style( 'agenli-popup', AGENLI_URL . 'admin/css/admin.css', array(), AGENLI_VERSION ); } public function ajax_save_settings() { check_ajax_referer( 'agenli_nonce', 'nonce' ); if ( ! current_user_can( 'manage_options' ) ) wp_die( 'Unauthorised' ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized $raw = isset( $_POST['data'] ) ? (array) wp_unslash( $_POST['data'] ) : array(); $opts = get_option( 'agenli_options', array() ); foreach ( $raw as $k => $v ) { $opts[ sanitize_key( $k ) ] = sanitize_text_field( $v ); } update_option( 'agenli_options', $opts ); wp_send_json_success( array( 'message' => 'Saved.' ) ); } public static function activate() { AGENLI_Leads::create_table(); AGENLI_Robots::set_defaults(); update_option( 'agenli_version', AGENLI_VERSION ); update_option( 'agenli_flush_rewrite', '1' ); } public static function deactivate() { flush_rewrite_rules(); } }