/home/techb158/balacoffee.com/wp-content/plugins/coming-soon/admin
NameSizeModeActions
css/-0755rm
images/-0755rm
includes/-0755rm
js/-0755rm
partials/-0755rm
class-seedprod-admin.php781650644editdlrm
Edit: /home/techb158/balacoffee.com/wp-content/plugins/coming-soon/admin/class-seedprod-admin.php (78165B)
plugin_name = $plugin_name; $this->version = $version; // Load admin function files. $this->load_admin_functions(); // Register AJAX actions. $this->register_ajax_actions(); // Add early redirect hook for subscribers tab in Lite. add_action( 'admin_init', array( $this, 'handle_subscribers_tab_redirect' ), 1 ); // Add redirect for old dashboard URL to new dashboard. add_action( 'admin_init', array( $this, 'handle_old_dashboard_redirect' ), 1 ); // Hook admin bar menu. add_action( 'admin_bar_menu', array( $this, 'add_admin_bar_menu' ), 999 ); // Add inline CSS for admin bar (loads on all admin pages when modes are active). add_action( 'admin_head', array( $this, 'add_admin_bar_styles' ) ); add_action( 'wp_head', array( $this, 'add_admin_bar_styles' ) ); // Add inline CSS for menu badge (loads on all admin pages). add_action( 'admin_head', array( $this, 'add_menu_badge_styles' ) ); // Fix menu highlighting for hidden pages. add_filter( 'parent_file', array( $this, 'fix_menu_highlighting' ) ); add_filter( 'submenu_file', array( $this, 'fix_submenu_highlighting' ) ); // Add JavaScript to fix menu highlighting for specific pages. add_action( 'admin_footer', array( $this, 'fix_menu_highlighting_js' ) ); } /** * Load all admin function files */ private function load_admin_functions() { $includes_dir = plugin_dir_path( __FILE__ ) . 'includes/'; // Load UTM/link functions. require_once $includes_dir . 'utm-functions.php'; // Load utility functions. require_once $includes_dir . 'utility-functions.php'; // Load license functions. require_once $includes_dir . 'license-functions.php'; // Load settings functions (V2 admin). require_once $includes_dir . 'settings-functions.php'; // Load product education functions (for Lite version). require_once $includes_dir . 'product-education-functions.php'; // Load plugin management functions (V2 admin). require_once $includes_dir . 'plugin-functions.php'; // Load setup wizard functions (V2 admin). require_once $includes_dir . 'setup-wizard-functions.php'; // Load system info functions (V2 admin). require_once $includes_dir . 'system-info-functions.php'; // Load debug functions (V2 admin). require_once $includes_dir . 'debug-functions.php'; // Load subscriber functions (V2 admin). require_once $includes_dir . 'subscriber-functions.php'; // Load template functions (V2 admin). require_once $includes_dir . 'template-functions.php'; // Load theme functions (V2 admin). require_once $includes_dir . 'theme-functions.php'; // Load import/export functions (V2 admin). require_once $includes_dir . 'import-export-functions.php'; // Load review request functions (V2 admin - Lite only). if ( 'lite' === SEEDPROD_BUILD ) { require_once $includes_dir . 'review-functions.php'; } } /** * Register AJAX actions for the admin area. */ private function register_ajax_actions() { // Track partner plugin activations for growth tool timing. add_action( 'activated_plugin', array( $this, 'track_partner_plugin_activation' ), 10, 2 ); // License activation (V2 - new admin system). add_action( 'wp_ajax_seedprod_lite_v2_save_api_key', array( $this, 'handle_license_activation' ) ); // Settings save (V2 - new admin system). add_action( 'wp_ajax_seedprod_lite_v2_save_settings', 'seedprod_lite_v2_save_settings' ); // App settings save (V2 - new admin system). add_action( 'wp_ajax_seedprod_lite_v2_save_app_settings', 'seedprod_lite_v2_save_app_settings' ); // License deactivation (V2 - new admin system). add_action( 'wp_ajax_seedprod_lite_v2_deactivate_api_key', 'seedprod_lite_v2_deactivate_api_key' ); // Plugin management (V2 - new admin system). add_action( 'wp_ajax_seedprod_lite_v2_install_plugin', 'seedprod_lite_v2_install_plugin' ); add_action( 'wp_ajax_seedprod_lite_v2_activate_plugin', 'seedprod_lite_v2_activate_plugin' ); add_action( 'wp_ajax_seedprod_lite_v2_deactivate_plugin', 'seedprod_lite_v2_deactivate_plugin' ); add_action( 'wp_ajax_seedprod_lite_v2_get_plugins_list', 'seedprod_lite_v2_get_plugins_list' ); // Setup wizard (V2 - new admin system). add_action( 'wp_ajax_seedprod_lite_v2_complete_setup_wizard', 'seedprod_lite_v2_complete_setup_wizard' ); add_action( 'wp_ajax_seedprod_lite_v2_install_addon_setup', 'seedprod_lite_v2_install_addon_setup' ); add_action( 'wp_ajax_seedprod_lite_v2_check_wizard_availability', 'seedprod_lite_v2_check_wizard_availability' ); add_action( 'wp_ajax_seedprod_lite_v2_dismiss_setup_wizard', 'seedprod_lite_v2_dismiss_setup_wizard' ); // Subscribers (V2 - new admin system). add_action( 'wp_ajax_seedprod_lite_v2_get_subscribers_datatable', 'seedprod_lite_v2_get_subscribers_datatable' ); add_action( 'wp_ajax_seedprod_lite_v2_delete_subscribers', 'seedprod_lite_v2_delete_subscribers' ); add_action( 'wp_ajax_seedprod_lite_v2_export_subscribers', 'seedprod_lite_v2_export_subscribers' ); // Templates (V2 - new admin system). add_action( 'wp_ajax_seedprod_lite_v2_get_templates', 'seedprod_lite_v2_get_templates' ); add_action( 'wp_ajax_seedprod_lite_v2_get_favorite_templates', 'seedprod_lite_v2_get_favorite_templates' ); add_action( 'wp_ajax_seedprod_lite_v2_toggle_favorite_template', 'seedprod_lite_v2_toggle_favorite_template' ); add_action( 'wp_ajax_seedprod_lite_v2_get_saved_templates', 'seedprod_lite_v2_get_saved_templates' ); add_action( 'wp_ajax_seedprod_lite_v2_create_page_from_template', 'seedprod_lite_v2_create_page_from_template' ); add_action( 'wp_ajax_seedprod_lite_v2_subscribe_free_templates', 'seedprod_lite_v2_subscribe_free_templates' ); // Theme functions (V2 - new admin system). add_action( 'wp_ajax_seedprod_lite_v2_update_theme_enabled', 'seedprod_lite_v2_update_theme_enabled' ); add_action( 'wp_ajax_seedprod_lite_v2_check_default_pages', 'seedprod_lite_v2_check_default_pages' ); add_action( 'wp_ajax_seedprod_lite_v2_create_default_pages', 'seedprod_lite_v2_create_default_pages' ); add_action( 'wp_ajax_seedprod_lite_v2_create_template', 'seedprod_lite_v2_create_template' ); add_action( 'wp_ajax_seedprod_lite_v2_get_template_conditions', 'seedprod_lite_v2_get_template_conditions' ); add_action( 'wp_ajax_seedprod_lite_v2_save_template_conditions', 'seedprod_lite_v2_save_template_conditions' ); add_action( 'wp_ajax_seedprod_lite_v2_toggle_template_status', 'seedprod_lite_v2_toggle_template_status' ); add_action( 'wp_ajax_seedprod_lite_v2_duplicate_template', 'seedprod_lite_v2_duplicate_template' ); add_action( 'wp_ajax_seedprod_lite_v2_trash_template', 'seedprod_lite_v2_trash_template' ); add_action( 'wp_ajax_seedprod_lite_v2_restore_template', 'seedprod_lite_v2_restore_template' ); add_action( 'wp_ajax_seedprod_lite_v2_delete_template', 'seedprod_lite_v2_delete_template' ); add_action( 'wp_ajax_seedprod_lite_v2_bulk_action_templates', 'seedprod_lite_v2_bulk_action_templates' ); // Theme kits actions (V2 - new admin system). add_action( 'wp_ajax_seedprod_lite_v2_get_theme_kits', 'seedprod_lite_v2_get_theme_kits' ); add_action( 'wp_ajax_seedprod_lite_v2_toggle_favorite_theme', 'seedprod_lite_v2_toggle_favorite_theme' ); // Theme import actions (V2 - new admin system). add_action( 'wp_ajax_seedprod_lite_v2_import_theme_request', 'seedprod_lite_v2_import_theme_request' ); add_action( 'wp_ajax_seedprod_lite_v2_delete_theme_pages', 'seedprod_lite_v2_delete_theme_pages' ); add_action( 'wp_ajax_seedprod_lite_v2_get_total_theme_pages', 'seedprod_lite_v2_get_total_theme_pages' ); // Theme Export/Import File actions (V2 - new admin system). add_action( 'wp_ajax_seedprod_lite_v2_export_theme_files', 'seedprod_lite_v2_export_theme_files' ); add_action( 'wp_ajax_seedprod_lite_v2_import_theme_files', 'seedprod_lite_v2_import_theme_files' ); add_action( 'wp_ajax_seedprod_lite_v2_import_theme_by_url', 'seedprod_lite_v2_import_theme_by_url' ); add_action( 'wp_ajax_seedprod_lite_v2_check_existing_theme', 'seedprod_lite_v2_check_existing_theme' ); // Landing Pages Export/Import File actions (V2 - new admin system). add_action( 'wp_ajax_seedprod_lite_v2_export_landing_pages', 'seedprod_lite_v2_export_landing_pages' ); add_action( 'wp_ajax_seedprod_lite_v2_import_landing_pages', 'seedprod_lite_v2_import_landing_pages' ); // Landing Pages CRUD actions (V2 - new admin system). add_action( 'wp_ajax_seedprod_lite_v2_duplicate_lpage', 'seedprod_lite_v2_duplicate_lpage' ); add_action( 'wp_ajax_seedprod_lite_v2_trash_lpage', 'seedprod_lite_v2_trash_lpage' ); add_action( 'wp_ajax_seedprod_lite_v2_restore_lpage', 'seedprod_lite_v2_restore_lpage' ); add_action( 'wp_ajax_seedprod_lite_v2_delete_lpage', 'seedprod_lite_v2_delete_lpage' ); add_action( 'wp_ajax_seedprod_lite_v2_bulk_action_lpages', 'seedprod_lite_v2_bulk_action_lpages' ); } /** * Handle redirect for subscribers tab in Lite version * Must run early before any output is sent */ public function handle_subscribers_tab_redirect() { // Only run on admin pages. if ( ! is_admin() ) { return; } // Check if we're on the settings page with subscribers tab. if ( isset( $_GET['page'] ) && 'seedprod_lite_settings' === $_GET['page'] && isset( $_GET['tab'] ) && 'subscribers' === $_GET['tab'] ) { // Check if we're in Lite view. if ( seedprod_lite_v2_is_lite_view() ) { // Redirect to the hidden subscribers page which shows the education content. wp_safe_redirect( admin_url( 'admin.php?page=seedprod_lite_subscribers' ) ); exit; } } } /** * Handle redirect from old dashboard URL to new dashboard URL * For backwards compatibility with bookmarks and saved links */ public function handle_old_dashboard_redirect() { // Only run on admin pages. if ( ! is_admin() ) { return; } // Check if we're on the old dashboard page. if ( isset( $_GET['page'] ) && 'seedprod_lite_dashboard' === $_GET['page'] ) { // Redirect to the new dashboard URL. wp_safe_redirect( admin_url( 'admin.php?page=seedprod_lite' ) ); exit; } } /** * Redirect callback for old dashboard menu item */ public function redirect_old_dashboard() { // Redirect to the new dashboard URL. wp_safe_redirect( admin_url( 'admin.php?page=seedprod_lite' ) ); exit; } /** * Handle license activation AJAX request. */ public function handle_license_activation() { // Call the V2 function (already loaded in constructor). seedprod_lite_v2_save_api_key(); } /** * Register the stylesheets for the admin area. */ public function enqueue_styles() { // Only load our CSS on our plugin pages. $screen = get_current_screen(); if ( strpos( $screen->id, 'seedprod' ) !== false ) { // Ensure dashicons are loaded. wp_enqueue_style( 'dashicons' ); wp_enqueue_style( $this->plugin_name, plugin_dir_url( __FILE__ ) . 'css/admin.css', array( 'dashicons' ), $this->version, 'all' ); // COMMENTED OUT: Tailwind CSS - keeping existing admin.css for now // wp_enqueue_style( // $this->plugin_name . '-tailwind', // SEEDPROD_PLUGIN_URL . 'public/css/tailwind-admin.min.css', // array(), // $this->version, // 'all' // ); // Load growth tools CSS on promotional pages. if ( strpos( $screen->id, 'seedprod_lite_popups' ) !== false || strpos( $screen->id, 'seedprod_lite_custom_code' ) !== false ) { wp_enqueue_style( $this->plugin_name . '-growth-tools', plugin_dir_url( __FILE__ ) . 'css/admin-growth-tools.css', array(), $this->version, 'all' ); } } } /** * Register the JavaScript for the admin area. */ public function enqueue_scripts() { // Only load our JS on our plugin pages. $screen = get_current_screen(); if ( strpos( $screen->id, 'seedprod' ) !== false ) { wp_enqueue_script( $this->plugin_name, plugin_dir_url( __FILE__ ) . 'js/admin.js', array( 'jquery' ), $this->version, false ); // Determine if we're in lite view. $is_lite_view = seedprod_lite_v2_is_lite_view(); $theme_conditions = array(); // Localize script with PHP data. wp_localize_script( $this->plugin_name, 'seedprod_admin', array( 'ajax_url' => admin_url( 'admin-ajax.php' ), 'admin_url' => admin_url(), 'nonce' => wp_create_nonce( 'seedprod_nonce' ), 'v2_nonce' => wp_create_nonce( 'seedprod_v2_nonce' ), 'notification_dismiss_nonce' => wp_create_nonce( 'seedprod_lite_notification_dismiss' ), 'conditions' => $theme_conditions, 'condition_modes' => array( 'include' => __( 'Include', 'coming-soon' ), 'exclude' => __( 'Exclude', 'coming-soon' ), 'custom' => __( 'Custom', 'coming-soon' ), ), 'urls' => array( 'ai_theme_builder' => 'https://ai.seedprod.com?utm_source=seedprod-plugin-proplugin&utm_medium=plugin-menu&utm_campaign=ai-themes-sidebar', 'upgrade_lite' => seedprod_lite_get_external_link( 'https://www.seedprod.com/lite-upgrade/', 'plugintemplatepage', 'liteplugin' ), ), 'strings' => array( // License messages. 'license_empty' => __( 'Please enter a license key.', 'coming-soon' ), 'license_success' => __( 'License activated successfully! Refreshing...', 'coming-soon' ), 'license_invalid' => __( 'Invalid license key. Please try again.', 'coming-soon' ), 'license_error' => __( 'An error occurred. Please try again.', 'coming-soon' ), // Toggle messages. 'settings_error' => __( 'Failed to update settings. Please try again.', 'coming-soon' ), 'status_active' => __( 'ACTIVE', 'coming-soon' ), 'status_inactive' => __( 'INACTIVE', 'coming-soon' ), // Default pages prompt. 'create_default_pages_prompt' => __( 'Your site is currently set to show latest posts. Would you like to create static Home and Blog pages for use with the SeedProd theme?', 'coming-soon' ), // Plugin messages. 'plugin_activate' => __( 'Activate', 'coming-soon' ), 'plugin_deactivate' => __( 'Deactivate', 'coming-soon' ), 'plugin_installed' => __( 'Plugin installed successfully!', 'coming-soon' ), 'plugin_activated' => __( 'Plugin activated!', 'coming-soon' ), 'plugin_deactivated' => __( 'Plugin deactivated.', 'coming-soon' ), 'plugin_error' => __( 'An error occurred. Please try again.', 'coming-soon' ), 'plugin_network_error' => __( 'Network error. Please check your connection and try again.', 'coming-soon' ), 'plugin_install_timeout' => __( 'Installation is taking longer than expected. Please try again or check your server logs.', 'coming-soon' ), 'plugin_timeout' => __( 'Operation timed out. Please try again.', 'coming-soon' ), 'plugin_active' => __( 'Active', 'coming-soon' ), 'plugin_inactive' => __( 'Inactive', 'coming-soon' ), 'installing' => __( 'Installing...', 'coming-soon' ), 'activating' => __( 'Activating...', 'coming-soon' ), 'deactivating' => __( 'Deactivating...', 'coming-soon' ), 'dismiss_notice' => __( 'Dismiss this notice.', 'coming-soon' ), // Copy button messages. 'copy_to_clipboard' => __( 'Copy to Clipboard', 'coming-soon' ), 'copied' => __( 'Copied!', 'coming-soon' ), // Subscriber messages. 'subscriber_delete_confirm' => __( 'Are you sure you want to delete the selected subscribers?', 'coming-soon' ), 'subscriber_delete_success' => __( 'Subscribers deleted successfully.', 'coming-soon' ), 'subscriber_export_success' => __( 'Subscribers exported successfully.', 'coming-soon' ), 'subscriber_no_selection' => __( 'Please select at least one subscriber.', 'coming-soon' ), 'subscriber_error' => __( 'An error occurred while managing subscribers.', 'coming-soon' ), 'loading' => __( 'Loading...', 'coming-soon' ), 'search_placeholder' => __( 'Search subscribers...', 'coming-soon' ), // Landing page messages. 'page_name_required' => __( 'Please enter a page name.', 'coming-soon' ), 'active' => __( 'Active', 'coming-soon' ), 'inactive' => __( 'Inactive', 'coming-soon' ), 'pro_tip' => __( 'Pro Tip:', 'coming-soon' ), 'landing_pages_upgrade_message' => __( 'Convert more visitors with 90+ Pro blocks plus MailChimp, ConvertKit integrations', 'coming-soon' ), 'learn_more' => __( 'Learn more', 'coming-soon' ), 'upgrade_to_pro' => __( 'Upgrade to Pro', 'coming-soon' ), // Button states. 'verifying' => __( 'Verifying...', 'coming-soon' ), 'saving' => __( 'Saving...', 'coming-soon' ), 'exporting' => __( 'Exporting...', 'coming-soon' ), 'importing' => __( 'Importing...', 'coming-soon' ), 'processing' => __( 'Processing...', 'coming-soon' ), 'verify_key' => __( 'Verify Key', 'coming-soon' ), 'deactivate_key' => __( 'Deactivate Key', 'coming-soon' ), 'save_settings' => __( 'Save Settings', 'coming-soon' ), 'export_templates' => __( 'Export All Templates', 'coming-soon' ), 'import_templates' => __( 'Import Templates', 'coming-soon' ), // License messages. 'license_verify_success' => __( 'License verified successfully!', 'coming-soon' ), 'license_deactivate_confirm' => __( 'Are you sure you want to deactivate your license?', 'coming-soon' ), 'license_deactivating' => __( 'Deactivating...', 'coming-soon' ), 'license_deactivate_success' => __( 'License deactivated successfully.', 'coming-soon' ), 'license_deactivate_error' => __( 'Could not deactivate license.', 'coming-soon' ), // Settings messages. 'settings_save_success' => __( 'Settings saved successfully!', 'coming-soon' ), 'settings_save_error' => __( 'Could not save settings.', 'coming-soon' ), // Template messages. 'template_name_required' => __( 'Template name is required', 'coming-soon' ), 'template_type_required' => __( 'Please select a template type', 'coming-soon' ), 'template_create_success' => __( 'Template created successfully', 'coming-soon' ), 'template_create_error' => __( 'Failed to create template', 'coming-soon' ), 'template_import_success' => __( 'Templates imported successfully!', 'coming-soon' ), 'template_import_error' => __( 'Import failed. Please check the file and try again.', 'coming-soon' ), 'template_import_preparing' => __( 'Preparing export file...', 'coming-soon' ), 'template_import_completed' => __( 'Export completed successfully!', 'coming-soon' ), 'template_importing' => __( 'Importing templates...', 'coming-soon' ), 'template_load_error' => __( 'Could not load templates. Please try again.', 'coming-soon' ), 'template_network_error' => __( 'Network error. Please check your connection and try again.', 'coming-soon' ), 'template_no_favorites' => __( 'No favorite templates found. Click the heart icon on any template to add it to your favorites.', 'coming-soon' ), 'template_no_saved' => __( 'No saved templates found. You can save pages as templates in the builder.', 'coming-soon' ), 'template_no_found' => __( 'No theme templates found.', 'coming-soon' ), // Conditions modal. 'condition_select_type' => __( 'Select Type', 'coming-soon' ), 'condition_enter_value' => __( 'Enter ids or slugs', 'coming-soon' ), // Theme messages. /* translators: %d is the number of existing theme pages */ 'theme_import_confirm' => __( 'You have %d existing theme pages. Do you want to delete them before importing the new theme?', 'coming-soon' ), 'theme_file_import_confirm' => __( 'You have existing theme templates. Do you want to delete them before importing the new theme?', 'coming-soon' ), /* translators: %s is the theme name */ 'theme_import_starting' => __( 'Importing theme "%s"... This may take a moment.', 'coming-soon' ), /* translators: %s is the theme name */ 'theme_import_success' => __( 'Theme "%s" imported successfully!', 'coming-soon' ), /* translators: %s is the error message */ 'theme_import_error' => __( 'Error importing theme: %s', 'coming-soon' ), /* translators: %s is the error message */ 'theme_delete_error' => __( 'Error deleting theme pages: %s', 'coming-soon' ), 'theme_delete_general_error' => __( 'Error deleting theme pages.', 'coming-soon' ), // Confirmation messages. 'confirm_duplicate' => __( 'Are you sure you want to duplicate this template?', 'coming-soon' ), 'confirm_trash' => __( 'Are you sure you want to trash this template?', 'coming-soon' ), 'confirm_delete' => __( 'Are you sure you want to permanently delete this template? This action cannot be undone.', 'coming-soon' ), 'confirm_bulk_trash' => __( 'Are you sure you want to trash the selected templates?', 'coming-soon' ), 'confirm_bulk_restore' => __( 'Are you sure you want to restore the selected templates?', 'coming-soon' ), 'confirm_bulk_delete' => __( 'Are you sure you want to permanently delete the selected templates?', 'coming-soon' ), 'confirm_page_trash' => __( 'Are you sure you want to move this page to trash?', 'coming-soon' ), 'confirm_page_delete' => __( 'Are you sure you want to permanently delete this page? This action cannot be undone.', 'coming-soon' ), // Form validation. 'select_file_or_url' => __( 'Please select a file or enter a URL.', 'coming-soon' ), 'no_items_selected' => __( 'Please select at least one template.', 'coming-soon' ), 'no_pages_selected' => __( 'Please select at least one page.', 'coming-soon' ), 'template_name_required' => __( 'Please enter a template name.', 'coming-soon' ), 'page_data_missing' => __( 'Page data is missing. Please try again.', 'coming-soon' ), 'enter_value_placeholder' => __( 'Enter value', 'coming-soon' ), 'enter_condition_placeholder' => __( 'Enter value (e.g., page ID, category name)', 'coming-soon' ), // Generic errors. 'unknown_error' => __( 'Unknown error', 'coming-soon' ), 'network_error' => __( 'Network error. Please try again.', 'coming-soon' ), 'create_page_error' => __( 'Could not create page from template. Please try again.', 'coming-soon' ), 'save_conditions_error' => __( 'Failed to save conditions', 'coming-soon' ), 'duplicate_page_error' => __( 'An error occurred while duplicating the page.', 'coming-soon' ), 'trash_page_error' => __( 'An error occurred while moving the page to trash.', 'coming-soon' ), 'restore_page_error' => __( 'An error occurred while restoring the page.', 'coming-soon' ), 'delete_page_error' => __( 'An error occurred while deleting the page.', 'coming-soon' ), 'bulk_action_error' => __( 'An error occurred while performing the bulk action.', 'coming-soon' ), 'test_mode_notice' => __( 'This is a test mode. To create a page, please use the "Create New Page" button from the Pages dashboard.', 'coming-soon' ), // Default names. 'untitled_theme' => __( 'Untitled Theme', 'coming-soon' ), 'untitled_template' => __( 'Untitled Template', 'coming-soon' ), 'template_preview' => __( 'Template Preview', 'coming-soon' ), // Additional error messages. 'error_occurred' => __( 'An error occurred. Please try again.', 'coming-soon' ), 'error' => __( 'Error', 'coming-soon' ), 'subscriber_load_error' => __( 'Could not load subscribers.', 'coming-soon' ), 'subscriber_none_found' => __( 'No subscribers found.', 'coming-soon' ), 'delete' => __( 'Delete', 'coming-soon' ), 'loading_templates' => __( 'Loading templates...', 'coming-soon' ), 'preview_not_available' => __( 'Preview Not Available', 'coming-soon' ), 'unable_load_templates' => __( 'Unable to Load Templates', 'coming-soon' ), 'create_blank_template' => __( 'You can still create a page with a blank template:', 'coming-soon' ), 'start_blank_template' => __( 'Start with Blank Template', 'coming-soon' ), 'refresh_templates' => __( 'or try refreshing the page to reload templates', 'coming-soon' ), 'refresh_page' => __( 'Refresh Page', 'coming-soon' ), 'saved_template_load_error' => __( 'Could not load saved templates.', 'coming-soon' ), 'no_favorites_found' => __( 'No favorite templates found. Click the heart icon on any template to add it to your favorites.', 'coming-soon' ), 'favorite_toggle_error' => __( 'Could not toggle favorite', 'coming-soon' ), 'favorite_network_error' => __( 'Network error when toggling favorite', 'coming-soon' ), 'email_subscribe_required' => __( 'Please subscribe with your email above to unlock this FREE template.', 'coming-soon' ), ), ) ); } } /** * Register admin menu items - we'll add these gradually as we migrate from Vue */ public function add_plugin_admin_menu() { // Get notification count for menu badge. $notification = ''; if ( class_exists( 'SeedProd_Notifications' ) ) { $n = SeedProd_Notifications::get_instance(); $notifications_count = $n->get_count(); // Check if notifications are disabled. $seedprod_app_settings = get_option( 'seedprod_app_settings' ); if ( ! empty( $seedprod_app_settings ) ) { $seedprod_app_settings = json_decode( stripslashes( $seedprod_app_settings ) ); if ( isset( $seedprod_app_settings->disable_seedprod_notification ) && true === $seedprod_app_settings->disable_seedprod_notification ) { $notifications_count = 0; } } // Add notification badge if count > 0. if ( ! empty( $notifications_count ) ) { $notification = ' ' . $notifications_count . ''; } } add_menu_page( 'SeedProd', 'SeedProd' . $notification, apply_filters( 'seedprod_main_menu_capability', 'edit_others_posts' ), 'seedprod_lite', 'seedprod_lite_dashboard_page', 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTI1IiBoZWlnaHQ9IjEzMiIgdmlld0JveD0iMCAwIDEyNSAxMzIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0wIDBDMCAwIDIuOTE2NjQgMC4xOTc4OTQgNjIuODIxMiA4LjAyNjgzQzEyMi43MjYgMTUuODU1OCAxNDMuNDU5IDc2LjYwNjQgMTA2Ljc4MSAxMjkuNjI4QzExMi40NTQgODIuMjUyNyAxMDIuMDcgMzMuMTA2MiA2MC4zNjA1IDI3LjM2MDZDMTguNjUwNSAyMS42MTUxIDIyLjI4MzQgMjIuNDk1NCAyMi4yODM0IDIyLjQ5NTRDMjIuMjgzNCAyMi40OTU0IDIyLjk3NDUgMzIuOTI5OSAyNi44ODgzIDYwLjk3OTlDMzAuODAyMSA4OS4wMjk5IDUyLjcwMzUgMTAyLjc4NiA3MS44NzA0IDEwOS44NjhDNzEuODcwNCAxMDkuODY4IDcyLjk5NDUgNzcuMDQwMSA2Mi4zMDA3IDYyLjU5MDlDNTEuNjA2OSA0OC4xNDE4IDM4LjMwMjYgMzguNTQ2IDM4LjMwMjYgMzguNTQ2QzM4LjMwMjYgMzguNTQ2IDY5LjU2OCA0Mi4yOTYgODEuMzcyMiA2NC4xMDE5QzkzLjE3NjQgODUuOTA3OCA5Mi4wMjY1IDEzMiA5Mi4wMjY1IDEzMkw3OS4yOTI1IDEzMS4zNDFDNDUuMDI4NCAxMjcuMjI1IDEzLjAxNzIgMTA2LjU5MSA3LjU3NDIzIDYzLjNDMi4xMzEzIDIwLjAwODggMCAwIDAgMFoiIGZpbGw9ImJsYWNrIi8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0wIDBDMCAwIDIuOTE2NjQgMC4xOTc4OTQgNjIuODIxMiA4LjAyNjgzQzEyMi43MjYgMTUuODU1OCAxNDMuNDU5IDc2LjYwNjQgMTA2Ljc4MSAxMjkuNjI4QzExMi40NTQgODIuMjUyNyAxMDIuMDcgMzMuMTA2MiA2MC4zNjA1IDI3LjM2MDZDMTguNjUwNSAyMS42MTUxIDIyLjI4MzQgMjIuNDk1NCAyMi4yODM0IDIyLjQ5NTRDMjIuMjgzNCAyMi40OTU0IDIyLjk3NDUgMzIuOTI5OSAyNi44ODgzIDYwLjk3OTlDMzAuODAyMSA4OS4wMjk5IDUyLjcwMzUgMTAyLjc4NiA3MS44NzA0IDEwOS44NjhDNzEuODcwNCAxMDkuODY4IDcyLjk5NDUgNzcuMDQwMSA2Mi4zMDA3IDYyLjU5MDlDNTEuNjA2OSA0OC4xNDE4IDM4LjMwMjYgMzguNTQ2IDM4LjMwMjYgMzguNTQ2QzM4LjMwMjYgMzguNTQ2IDY5LjU2OCA0Mi4yOTYgODEuMzcyMiA2NC4xMDE5QzkzLjE3NjQgODUuOTA3OCA5Mi4wMjY1IDEzMiA5Mi4wMjY1IDEzMkw3OS4yOTI1IDEzMS4zNDFDNDUuMDI4NCAxMjcuMjI1IDEzLjAxNzIgMTA2LjU5MSA3LjU3NDIzIDYzLjNDMi4xMzEzIDIwLjAwODggMCAwIDAgMFoiIGZpbGw9IndoaXRlIi8+PC9zdmc+', apply_filters( 'seedprod_top_level_menu_postion', 58 ) ); // Add Dashboard as the first submenu item (overrides the default duplicate). // This makes the first submenu item say "Dashboard" instead of "SeedProd". add_submenu_page( 'seedprod_lite', __( 'Dashboard', 'coming-soon' ), __( 'Dashboard', 'coming-soon' ), apply_filters( 'seedprod_dashboard_menu_capability', 'edit_others_posts' ), 'seedprod_lite', array( $this, 'display_dashboard_page' ) ); // AI Themes - External link (handled via JavaScript) - Position #2 for maximum visibility. add_submenu_page( 'seedprod_lite', __( 'AI Theme Builder', 'coming-soon' ), __( 'AI Theme Builder', 'coming-soon' ) . '  FREE', apply_filters( 'seedprod_ai_themes_menu_capability', 'edit_others_posts' ), 'seedprod_lite_ai_themes', '__return_false' ); // Website Builder page (V2 WordPress-native). add_submenu_page( 'seedprod_lite', __( 'Website Builder', 'coming-soon' ), __( 'Website Builder', 'coming-soon' ), 'manage_options', 'seedprod_lite_website_builder', array( $this, 'display_website_builder_page' ) ); // Landing Pages page (V2 WordPress-native). add_submenu_page( 'seedprod_lite', __( 'Landing Pages', 'coming-soon' ), __( 'Landing Pages', 'coming-soon' ), 'manage_options', 'seedprod_lite_landing_pages', array( $this, 'display_landing_pages_page' ) ); // Settings page (V2 WordPress-native). add_submenu_page( 'seedprod_lite', __( 'Settings', 'coming-soon' ), __( 'Settings', 'coming-soon' ), apply_filters( 'seedprod_settings_menu_capability', 'edit_others_posts' ), 'seedprod_lite_settings', array( $this, 'display_settings_page' ) ); // Rotating promotional menu item. $rotating_item = $this->get_rotating_menu_item(); if ( $rotating_item ) { add_submenu_page( 'seedprod_lite', $rotating_item['page_title'], $rotating_item['menu_title'], 'manage_options', $rotating_item['menu_slug'], array( $this, $rotating_item['callback'] ) ); } // Add "Upgrade to Pro" menu item for Lite version (or when testing with ?test_lite=1) $is_lite_view = seedprod_lite_v2_is_lite_view(); if ( $is_lite_view ) { add_submenu_page( 'seedprod_lite', __( 'Upgrade to Pro', 'coming-soon' ), '' . __( 'Upgrade to Pro', 'coming-soon' ) . '', apply_filters( 'seedprod_gopro_menu_capability', 'edit_others_posts' ), 'seedprod_lite_get_pro', '__return_false' // No page content, handled via redirect. ); // Add green styling to upgrade menu item. add_action( 'admin_footer', array( $this, 'add_upgrade_menu_styling' ) ); } // Hidden promotional pages for testing. // Using empty string '' instead of null to avoid PHP 8+ deprecation warnings. // This is the recommended approach for WordPress with PHP 8.1+ compatibility add_submenu_page( 'options.php', // Use non-existent parent to hide from menu (avoids null deprecation). __( 'Popups', 'coming-soon' ), __( 'Popups', 'coming-soon' ), 'manage_options', 'seedprod_lite_popups', array( $this, 'display_popups_page' ) ); add_submenu_page( 'options.php', // Use non-existent parent to hide from menu (avoids null deprecation). __( 'Cookie Consent', 'coming-soon' ), __( 'Cookie Consent', 'coming-soon' ), 'manage_options', 'seedprod_lite_cookie_consent', array( $this, 'display_cookie_consent_page' ) ); add_submenu_page( 'options.php', // Use non-existent parent to hide from menu (avoids null deprecation). __( 'Custom Code', 'coming-soon' ), __( 'Custom Code', 'coming-soon' ), 'manage_options', 'seedprod_lite_custom_code', array( $this, 'display_custom_code_page' ) ); // Debug Tools page (V2 WordPress-native) - Hidden menu. add_submenu_page( 'options.php', // Use non-existent parent to hide from menu (avoids null deprecation). __( 'Debug Tools', 'coming-soon' ), __( 'Debug Tools', 'coming-soon' ), apply_filters( 'seedprod_debug_menu_capability', 'edit_others_posts' ), 'seedprod_lite_debug', array( $this, 'display_debug_page' ) ); // Template Selection page (V2 WordPress-native) - Hidden menu. add_submenu_page( 'options.php', // Use non-existent parent to hide from menu (avoids null deprecation). __( 'Template Selection', 'coming-soon' ), __( 'Template Selection', 'coming-soon' ), 'manage_options', 'seedprod_lite_template_selection', array( $this, 'display_template_selection_page' ) ); // Theme Kits Selection page (V2 WordPress-native) - Hidden menu. add_submenu_page( 'options.php', // Use non-existent parent to hide from menu (avoids null deprecation). __( 'Theme Kits Selection', 'coming-soon' ), __( 'Theme Kits Selection', 'coming-soon' ), 'manage_options', 'seedprod_lite_theme_kits_selection', array( $this, 'display_theme_kits_selection_page' ) ); // Support page (V2 WordPress-native) - Hidden menu, accessed via help icon. add_submenu_page( 'options.php', // Use non-existent parent to hide from menu (avoids null deprecation). __( 'Get Support', 'coming-soon' ), __( 'Get Support', 'coming-soon' ), 'manage_options', 'seedprod_lite_support', array( $this, 'display_support_page' ) ); // Builder page (Vue.js builder) - Hidden menu, accessed via edit buttons add_submenu_page( 'options.php', // Use non-existent parent to hide from menu (avoids null deprecation). __( 'Builder', 'coming-soon' ), __( 'Builder', 'coming-soon' ), apply_filters( 'seedprod_builder_menu_capability', 'edit_others_posts' ), 'seedprod_lite_builder', 'seedprod_lite_builder_page' ); // Hidden welcome page (accessed via redirect on activation). add_submenu_page( 'options.php', // Use non-existent parent to hide from menu (avoids null deprecation). __( 'Welcome to SeedProd', 'coming-soon' ), __( 'Welcome', 'coming-soon' ), 'manage_options', 'seedprod_lite_welcome', array( $this, 'display_welcome_page' ) ); // Hidden debug page (V2 - accessed from settings). add_submenu_page( '', // Hidden from menu for now. __( 'Dashboard', 'coming-soon' ), __( 'Dashboard', 'coming-soon' ), apply_filters( 'seedprod_main_menu_capability', 'edit_others_posts' ), 'seedprod_lite_dashboard', array( $this, 'redirect_old_dashboard' ) ); // Hidden subscribers page (V2 - shows product education for Lite). add_submenu_page( 'options.php', // Use non-existent parent to hide from menu (avoids null deprecation). __( 'Subscribers', 'coming-soon' ), __( 'Subscribers', 'coming-soon' ), apply_filters( 'seedprod_subscribers_menu_capability', 'edit_others_posts' ), 'seedprod_lite_subscribers', array( $this, 'display_subscribers_page' ) ); } /** * Render the welcome page */ public function display_welcome_page() { require_once plugin_dir_path( __FILE__ ) . 'partials/seedprod-admin-welcome.php'; } /** * Render the dashboard page */ public function display_dashboard_page() { require_once plugin_dir_path( __FILE__ ) . 'partials/seedprod-admin-dashboard.php'; } /** * Render the landing pages page */ public function display_landing_pages_page() { // Enqueue admin JavaScript. wp_enqueue_script( 'seedprod-admin', plugin_dir_url( __FILE__ ) . 'js/admin.js', array( 'jquery', 'wp-util', 'updates' ), $this->version, true ); // Localize script with landing page strings. wp_localize_script( 'seedprod-admin', 'seedprod_admin', array( 'ajax_url' => admin_url( 'admin-ajax.php' ), 'admin_url' => admin_url(), 'nonce' => wp_create_nonce( 'seedprod_nonce' ), 'v2_nonce' => wp_create_nonce( 'seedprod_v2_nonce' ), 'strings' => array( // Export/Import messages. 'loading' => __( 'Processing...', 'coming-soon' ), 'export_all_landing_pages' => __( 'Export All Landing Pages', 'coming-soon' ), 'export_selected_page' => __( 'Export Selected Page', 'coming-soon' ), 'export_completed' => __( 'Export completed successfully!', 'coming-soon' ), 'preparing_export' => __( 'Preparing export file...', 'coming-soon' ), // Import messages. 'import_success' => __( 'Import completed successfully!', 'coming-soon' ), 'uploading_file' => __( 'Uploading file...', 'coming-soon' ), 'processing_import' => __( 'Processing import...', 'coming-soon' ), // Error messages. 'error_occurred' => __( 'An error occurred. Please try again.', 'coming-soon' ), 'invalid_file_type' => __( 'Please select a valid ZIP file.', 'coming-soon' ), // Upgrade/Lite view messages. 'pro_tip' => __( 'Pro Tip:', 'coming-soon' ), 'landing_pages_upgrade_message' => __( 'Convert more visitors with 90+ Pro blocks plus MailChimp, ConvertKit integrations', 'coming-soon' ), 'learn_more' => __( 'Learn more', 'coming-soon' ), 'upgrade_to_pro' => __( 'Upgrade to Pro', 'coming-soon' ), ), ) ); require_once plugin_dir_path( __FILE__ ) . 'partials/seedprod-admin-landing-pages.php'; } /** * Render the website builder page */ public function display_website_builder_page() { require_once plugin_dir_path( __FILE__ ) . 'partials/seedprod-admin-website-builder.php'; } /** * Render the settings page */ public function display_settings_page() { // In Lite build, redirect Subscribers tab to the standalone education page. if ( 'lite' === SEEDPROD_BUILD ) { $current_tab = isset( $_GET['tab'] ) ? sanitize_text_field( wp_unslash( $_GET['tab'] ) ) : 'general'; if ( 'subscribers' === $current_tab ) { wp_safe_redirect( admin_url( 'admin.php?page=seedprod_lite_subscribers' ) ); exit; } } require_once plugin_dir_path( __FILE__ ) . 'partials/seedprod-admin-settings.php'; } /** * Render the template selection page */ public function display_template_selection_page() { require_once plugin_dir_path( __FILE__ ) . 'partials/seedprod-admin-template-selection.php'; } /** * Render the theme kits selection page */ public function display_theme_kits_selection_page() { require_once plugin_dir_path( __FILE__ ) . 'partials/seedprod-admin-theme-kits-selection.php'; } /** * Render the subscribers page */ public function display_subscribers_page() { require_once plugin_dir_path( __FILE__ ) . 'partials/seedprod-admin-subscribers.php'; } /** * Render the debug page */ public function display_debug_page() { require_once plugin_dir_path( __FILE__ ) . 'partials/seedprod-admin-debug.php'; } /** * Fix menu highlighting for hidden pages * * @param string $parent_file The parent file. * @return string Modified parent file */ public function fix_menu_highlighting( $parent_file ) { global $plugin_page, $submenu_file; // Check if we're on one of our hidden pages. if ( isset( $plugin_page ) ) { switch ( $plugin_page ) { case 'seedprod_lite_theme_kits_selection': // Highlight Website Builder menu item and expand menu. $parent_file = 'seedprod_lite'; $submenu_file = 'seedprod_lite_website_builder'; break; case 'seedprod_lite_template_selection': // Highlight Landing Pages menu item and expand menu. $parent_file = 'seedprod_lite'; $submenu_file = 'seedprod_lite_landing_pages'; break; case 'seedprod_lite_subscribers': // Highlight Settings menu item and expand menu. $parent_file = 'seedprod_lite'; $submenu_file = 'seedprod_lite_settings'; break; } } return $parent_file; } /** * Fix submenu highlighting for hidden pages * * @param string $submenu_file The submenu file. * @return string Modified submenu file */ public function fix_submenu_highlighting( $submenu_file ) { global $plugin_page; // Check if we're on one of our hidden pages. if ( isset( $plugin_page ) ) { switch ( $plugin_page ) { case 'seedprod_lite_theme_kits_selection': $submenu_file = 'seedprod_lite_website_builder'; break; case 'seedprod_lite_template_selection': $submenu_file = 'seedprod_lite_landing_pages'; break; case 'seedprod_lite_subscribers': $submenu_file = 'seedprod_lite_settings'; break; } } return $submenu_file; } /** * Add JavaScript to properly highlight menu for hidden pages */ public function fix_menu_highlighting_js() { global $plugin_page; // Only run on our hidden pages. if ( ! isset( $plugin_page ) || 'seedprod_lite_subscribers' !== $plugin_page ) { return; } ?> '; // Determine text based on active mode. $text = 'SeedProd'; if ( $coming_soon_active ) { $text = '' . __( 'Coming Soon Mode Active', 'coming-soon' ) . ''; } elseif ( $maintenance_active ) { $text = '' . __( 'Maintenance Mode Active', 'coming-soon' ) . ''; } elseif ( ! empty( $theme_preview_mode ) ) { $text = '' . __( 'Theme Preview Mode Active', 'coming-soon' ) . ''; } // Add the admin bar menu item. $wp_admin_bar->add_menu( array( 'id' => 'seedprod_admin_bar', 'href' => admin_url( 'admin.php?page=seedprod_lite' ), // Link to main admin page. 'parent' => 'top-secondary', 'title' => $icon . $text, 'meta' => array( 'class' => 'seedprod-mode-active' ), ) ); } /** * Add inline styles for admin bar notice * Only loads when Coming Soon or Maintenance Mode is active */ public function add_admin_bar_styles() { // Get settings. $settings_json = get_option( 'seedprod_settings' ); $settings = json_decode( $settings_json, true ); // Check if any mode is active. $coming_soon_active = ! empty( $settings['enable_coming_soon_mode'] ); $maintenance_active = ! empty( $settings['enable_maintenance_mode'] ); $theme_preview_mode = get_option( 'seedprod_theme_template_preview_mode' ); // Only add styles if a mode is active. if ( ! $coming_soon_active && ! $maintenance_active && empty( $theme_preview_mode ) ) { return; } // Check if admin bar is showing. if ( ! is_admin_bar_showing() ) { return; } ?> __( 'Popups', 'coming-soon' ), 'page_title' => __( 'Popups by OptinMonster', 'coming-soon' ), 'menu_slug' => 'seedprod_lite_popups', 'callback' => 'display_popups_page', ); } // Check if we should wait before showing the next growth tool. if ( $enable_growth_tool_delay && $optinmonster_installed ) { // Get the activation date for OptinMonster. $activation_date = get_option( 'seedprod_partner_optinmonster_activated', false ); // If no activation date stored, set it now (plugin was already active). if ( ! $activation_date ) { update_option( 'seedprod_partner_optinmonster_activated', current_time( 'timestamp' ) ); $activation_date = current_time( 'timestamp' ); } // Check if enough time has passed. $days_since_activation = ( current_time( 'timestamp' ) - $activation_date ) / DAY_IN_SECONDS; if ( $days_since_activation < $delay_days ) { // Not enough time has passed, don't show next growth tool. return null; } } // Priority 2: WPConsent (Cookie Consent). $wpconsent_installed = is_plugin_active( 'wpconsent-cookies-banner-privacy-suite/wpconsent.php' ); if ( ! $wpconsent_installed ) { // Check if we should wait before showing WPConsent. if ( $enable_growth_tool_delay && $optinmonster_installed ) { // Get the activation date for OptinMonster. $activation_date = get_option( 'seedprod_partner_optinmonster_activated', false ); // If no activation date stored, set it now. if ( ! $activation_date ) { update_option( 'seedprod_partner_optinmonster_activated', current_time( 'timestamp' ) ); $activation_date = current_time( 'timestamp' ); } // Check if enough time has passed. $days_since_activation = ( current_time( 'timestamp' ) - $activation_date ) / DAY_IN_SECONDS; if ( $days_since_activation < $delay_days ) { // Not enough time has passed, don't show next growth tool. return null; } } // WPConsent not installed - promote it. return array( 'menu_title' => __( 'Cookie Consent', 'coming-soon' ), 'page_title' => __( 'Cookie Consent & Privacy Compliance', 'coming-soon' ), 'menu_slug' => 'seedprod_lite_cookie_consent', 'callback' => 'display_cookie_consent_page', ); } // Priority 3: WP Code (check both free and pro versions). $wpcode_free_installed = is_plugin_active( 'insert-headers-and-footers/ihaf.php' ); $wpcode_pro_installed = is_plugin_active( 'wpcode-premium/wpcode.php' ); if ( ! $wpcode_free_installed && ! $wpcode_pro_installed ) { // Check if we should wait before showing WPCode. if ( $enable_growth_tool_delay && $wpconsent_installed ) { // Get the activation date for WPConsent. $activation_date = get_option( 'seedprod_partner_wpconsent_activated', false ); // If no activation date stored, set it now. if ( ! $activation_date ) { update_option( 'seedprod_partner_wpconsent_activated', current_time( 'timestamp' ) ); $activation_date = current_time( 'timestamp' ); } // Check if enough time has passed. $days_since_activation = ( current_time( 'timestamp' ) - $activation_date ) / DAY_IN_SECONDS; if ( $days_since_activation < $delay_days ) { // Not enough time has passed, don't show next growth tool. return null; } } // WP Code not installed at all - promote free version. return array( 'menu_title' => __( 'Custom Code', 'coming-soon' ), 'page_title' => __( 'Custom Code - Insert Headers, Footers, and Code Snippets', 'coming-soon' ), 'menu_slug' => 'seedprod_lite_custom_code', 'callback' => 'display_custom_code_page', ); } // All three (OptinMonster, WPConsent, and WP Code) are installed, don't show anything. return null; } /** * Display the Popups promotional page * * @since 1.0.0 */ public function display_popups_page() { // Enqueue growth tools CSS. wp_enqueue_style( 'seedprod-admin-growth-tools', plugin_dir_url( __FILE__ ) . 'css/admin-growth-tools.css', array(), $this->version ); // Enqueue admin JS for plugin installer. wp_enqueue_script( 'seedprod-admin', plugin_dir_url( __FILE__ ) . 'js/admin.js', array( 'jquery', 'wp-util', 'updates' ), $this->version, true ); // Localize script for AJAX - including all required strings. wp_localize_script( 'seedprod-admin', 'seedprod_admin', array( 'ajax_url' => admin_url( 'admin-ajax.php' ), 'nonce' => wp_create_nonce( 'seedprod_nonce' ), 'strings' => array( // Template loading messages. 'unable_load_templates' => __( 'Unable to Load Templates', 'coming-soon' ), 'loading_templates' => __( 'Loading templates...', 'coming-soon' ), 'error_loading_templates' => __( 'Error loading templates', 'coming-soon' ), 'no_templates_found' => __( 'No templates found', 'coming-soon' ), 'network_error' => __( 'Network error. Please check your connection and try again.', 'coming-soon' ), ), ) ); // Configure OptinMonster promotional content. $growth_tool_config = array( 'partner_name' => __( 'OptinMonster', 'coming-soon' ), 'headline' => __( 'Stop Losing 95% of Your Visitors Without Their Email', 'coming-soon' ), 'subheadline' => __( 'Add Smart Popups to Your SeedProd Pages in Under 60 Seconds', 'coming-soon' ), 'benefits' => array( __( 'Exit Intent™ technology captures visitors before they leave', 'coming-soon' ), __( '700+ proven templates ready to customize', 'coming-soon' ), __( 'Target by behavior, location, and page visits', 'coming-soon' ), __( 'A/B test popups to maximize conversions', 'coming-soon' ), __( 'Works with MailChimp, ConvertKit, ActiveCampaign & more', 'coming-soon' ), ), 'cta_headline' => __( '⏰ Every Minute You Wait = More Lost Subscribers', 'coming-soon' ), 'cta_subtext' => __( 'Free version includes 3 campaigns • 60-second setup', 'coming-soon' ), 'social_proof' => __( 'Join 1,213,437+ websites already using OptinMonster', 'coming-soon' ), 'image' => 'om-image.png', 'plugin_slug' => 'optinmonster/optin-monster-wp-api.php', 'plugin_id' => 'optinmonster', ); ?>
version ); // Enqueue admin JS for plugin installer. wp_enqueue_script( 'seedprod-admin', plugin_dir_url( __FILE__ ) . 'js/admin.js', array( 'jquery', 'wp-util', 'updates' ), $this->version, true ); // Localize script for AJAX - including all required strings. wp_localize_script( 'seedprod-admin', 'seedprod_admin', array( 'ajax_url' => admin_url( 'admin-ajax.php' ), 'nonce' => wp_create_nonce( 'seedprod_nonce' ), 'strings' => array( // Template loading messages. 'unable_load_templates' => __( 'Unable to Load Templates', 'coming-soon' ), 'loading_templates' => __( 'Loading templates...', 'coming-soon' ), 'error_loading_templates' => __( 'Error loading templates', 'coming-soon' ), 'no_templates_found' => __( 'No templates found', 'coming-soon' ), 'network_error' => __( 'Network error. Please check your connection and try again.', 'coming-soon' ), ), ) ); // Configure WPConsent promotional content. $growth_tool_config = array( 'partner_name' => __( 'WPConsent', 'coming-soon' ), 'headline' => __( 'Make Your Site Privacy Compliant in Minutes', 'coming-soon' ), 'subheadline' => __( 'Add Professional Cookie Consent Banners Without Coding', 'coming-soon' ), 'benefits' => array( __( 'GDPR & CCPA compliant cookie consent management', 'coming-soon' ), __( 'Automatic website cookie scanning and script blocking', 'coming-soon' ), __( 'Customizable banners that match your brand perfectly', 'coming-soon' ), __( 'Searchable consent records with user management', 'coming-soon' ), __( 'Self-hosted solution with geolocation detection', 'coming-soon' ), ), 'cta_headline' => __( '⚖️ Protect Your Business from Privacy Violations', 'coming-soon' ), 'cta_subtext' => __( 'Quick setup • No coding required • 14-day money-back guarantee', 'coming-soon' ), 'social_proof' => __( 'Join thousands of WordPress sites achieving privacy compliance', 'coming-soon' ), 'image' => 'wpconsent-image.svg', 'plugin_slug' => 'wpconsent-cookies-banner-privacy-suite/wpconsent.php', 'plugin_id' => 'wpconsent', ); // Display the promotional page. ?>
version ); // Enqueue admin JS for plugin installer. wp_enqueue_script( 'seedprod-admin', plugin_dir_url( __FILE__ ) . 'js/admin.js', array( 'jquery', 'wp-util', 'updates' ), $this->version, true ); // Localize script for AJAX - including all required strings. wp_localize_script( 'seedprod-admin', 'seedprod_admin', array( 'ajax_url' => admin_url( 'admin-ajax.php' ), 'nonce' => wp_create_nonce( 'seedprod_nonce' ), 'strings' => array( // Template loading messages. 'unable_load_templates' => __( 'Unable to Load Templates', 'coming-soon' ), 'loading_templates' => __( 'Loading templates...', 'coming-soon' ), 'error_loading_templates' => __( 'Error loading templates', 'coming-soon' ), 'no_templates_found' => __( 'No templates found', 'coming-soon' ), 'network_error' => __( 'Network error. Please check your connection and try again.', 'coming-soon' ), ), ) ); // Configure WPCode promotional content. $growth_tool_config = array( 'partner_name' => __( 'WPCode', 'coming-soon' ), 'headline' => __( 'Add Custom Code Without Breaking Your Site', 'coming-soon' ), 'subheadline' => __( 'Safely Add Headers, Footers & Scripts That Work Perfectly with SeedProd', 'coming-soon' ), 'benefits' => array( __( 'Replace 6-8 plugins on average with lightweight code snippets', 'coming-soon' ), __( 'Add Google Analytics, Facebook Pixel & tracking scripts safely', 'coming-soon' ), __( '100+ expert-approved snippets ready to use instantly', 'coming-soon' ), __( 'Automatic error detection prevents site crashes', 'coming-soon' ), __( 'Your code survives theme updates and changes', 'coming-soon' ), ), 'cta_headline' => __( '⏰ Start Adding Custom Code Safely in Seconds', 'coming-soon' ), 'cta_subtext' => __( '100% free • Installs in seconds', 'coming-soon' ), 'social_proof' => __( 'Join 2,000,000+ websites already using WPCode', 'coming-soon' ), 'image' => 'wp-code-image.png', 'plugin_slug' => 'insert-headers-and-footers/ihaf.php', 'plugin_id' => 'wpcode', ); ?>
version ); // Configure Website Builder educational content. $product_education_config = array( 'feature_name' => __( 'Website Builder', 'coming-soon' ), 'headline' => __( 'Get a Full Website With One-Click Without Being a Developer', 'coming-soon' ), 'subheadline' => __( 'Stop losing customers to DIY-looking websites. Get a conversion-optimized site that looks like you paid $10k for it.', 'coming-soon' ), 'description' => __( 'Transform your entire WordPress site into a pixel-perfect, professionally designed website in minutes. No coding skills required.', 'coming-soon' ), 'benefits' => array( __( 'Build headers, footers, pages, posts & sidebars - control your entire theme', 'coming-soon' ), __( '350+ professionally designed templates ready to import instantly', 'coming-soon' ), __( 'AI Builder generates complete custom themes in seconds', 'coming-soon' ), __( 'WooCommerce ready - design product pages, shop & checkout', 'coming-soon' ), __( 'Lightning-fast imports & bloat-free code for better conversions', 'coming-soon' ), __( 'No coding required - 100% visual drag and drop builder', 'coming-soon' ), ), 'features' => array( array( 'icon' => 'admin-appearance', 'title' => __( 'Theme Builder', 'coming-soon' ), 'description' => __( 'Design every part of your WordPress theme visually including headers, footers, sidebars, and content areas.', 'coming-soon' ), ), array( 'icon' => 'layout', 'title' => __( 'Dynamic Content', 'coming-soon' ), 'description' => __( 'Create templates for posts, pages, categories, tags, and custom post types that automatically update.', 'coming-soon' ), ), array( 'icon' => 'cart', 'title' => __( 'WooCommerce Builder', 'coming-soon' ), 'description' => __( 'Design custom product pages, shop layouts, cart, and checkout pages that convert.', 'coming-soon' ), ), array( 'icon' => 'smartphone', 'title' => __( 'Responsive Controls', 'coming-soon' ), 'description' => __( 'Perfect control over how your site looks on desktop, tablet, and mobile devices.', 'coming-soon' ), ), ), 'image' => 'pe/pe-website-builder.png', 'image_link' => seedprod_lite_get_external_link( 'https://www.seedprod.com/templates/', 'website-builder-education-image', 'liteplugin' ), 'testimonial' => array( 'text' => 'This plugin is simple to understand and use. It doesn\'t get in the way of making the page look like I want to. If you know even just a little about HTML and CSS, all the better but it\'s not vital.', 'author' => 'Glenn Watson', 'company' => 'WordPress.org User', ), 'cta_headline' => __( '🚀 Ready to Build Your Dream Website?', 'coming-soon' ), // 'primary_button' => array( // 'text' => __( 'Get Instant Access to Website Builder', 'coming-soon' ), // ), 'secondary_button' => array( 'text' => __( 'Try Free: AI Builds Your Site in 60 Seconds', 'coming-soon' ), 'url' => 'https://ai.seedprod.com?utm_source=seedprod-plugin-proplugin&utm_medium=themebuilderpage-education&utm_campaign=ai-builder-secondary-cta', 'icon' => 'dashicons-admin-customizer', 'new_tab' => true, ), 'feature_slug' => 'website-builder', 'cta_context' => 'themebuilderpage-education', // UTM medium to match old Vue tracking. 'use_exact_utm_medium' => true, // Skip 'plugin' prefix for legacy tracking compatibility. ); ?>
version ); // Configure Subscribers educational content. $product_education_config = array( 'feature_name' => __( 'Subscribers', 'coming-soon' ), 'headline' => __( 'Start Collecting Emails in 60 Seconds - No Email Service Required', 'coming-soon' ), 'subheadline' => __( 'Build your list from day one. Store unlimited subscribers in WordPress and export them anywhere, anytime.', 'coming-soon' ), 'description' => __( 'Never miss a lead again. Collect email addresses from your visitors and manage them all in one place, even before your email service is connected.', 'coming-soon' ), 'benefits' => array( __( 'Store unlimited email subscribers directly in WordPress', 'coming-soon' ), __( 'Export subscriber lists to CSV for easy import to any email service', 'coming-soon' ), __( 'Never lose a lead - capture emails even without an email service connected', 'coming-soon' ), __( 'One-click sync with 15+ providers: Mailchimp, ConvertKit, ActiveCampaign & more', 'coming-soon' ), __( 'Connect Zapier to sync with 3000+ apps automatically', 'coming-soon' ), __( 'Works day one - collect emails instantly, connect your service later', 'coming-soon' ), ), 'features' => array( array( 'icon' => 'groups', 'title' => __( 'Subscriber Dashboard', 'coming-soon' ), 'description' => __( 'View all your subscribers in one organized dashboard with search and filter capabilities.', 'coming-soon' ), ), array( 'icon' => 'download', 'title' => __( 'Export to CSV', 'coming-soon' ), 'description' => __( 'Download your subscriber lists in CSV format for easy import to any email marketing service.', 'coming-soon' ), ), array( 'icon' => 'chart-line', 'title' => __( 'Conversion Tracking', 'coming-soon' ), 'description' => __( 'Track how many visitors convert to subscribers and monitor your growth trends.', 'coming-soon' ), ), array( 'icon' => 'shield', 'title' => __( 'Privacy Compliant', 'coming-soon' ), 'description' => __( 'Built-in GDPR compliance features including consent checkboxes and data management.', 'coming-soon' ), ), ), 'image' => 'pe/pe-subscribers.png', 'testimonial' => array( 'text' => 'Want to create a great looking landing page and grab emails easily? Check out SeedProd!', 'author' => 'Chris Ducker', 'company' => 'Author of \'Virtual Freedom\'', ), 'cta_headline' => __( '📧 Ready to Start Building Your Email List?', 'coming-soon' ), 'feature_slug' => 'subscribers', 'cta_context' => 'pluginsubscriberpage', // Exact UTM medium to match old tracking. 'use_exact_utm_medium' => true, // Skip 'plugin' prefix - use exact value. ); ?>
'support', 'feature_name' => __( 'Premium Support', 'coming-soon' ), 'feature_heading' => __( 'Premium Support', 'coming-soon' ), 'headline' => __( 'Get Unstuck in Minutes, Not Days', 'coming-soon' ), 'subheadline' => __( 'Our WordPress experts solve your issues fast so you can focus on growing your business', 'coming-soon' ), 'description' => __( 'Stop wasting hours on forums hoping someone might help. With Pro support, you get direct access to our expert developers who know exactly how to fix your issue - usually within hours, not days.', 'coming-soon' ), 'feature_intro' => __( 'Get Priority Support from the SeedProd Team', 'coming-soon' ), 'feature_description' => __( 'Upgrade to SeedProd Pro and get access to our world-class support team. Our experts are ready to help you build amazing websites faster with priority email support.', 'coming-soon' ), 'benefits' => array( __( 'Priority email support - faster responses than community forums', 'coming-soon' ), __( 'Direct help from the developers who built SeedProd', 'coming-soon' ), __( 'Premium documentation and video tutorials for every feature', 'coming-soon' ), __( 'Personalized solutions and code snippets for your specific needs', 'coming-soon' ), __( 'Pro optimization tips to improve your site performance', 'coming-soon' ), __( '14-day money-back guarantee - zero risk to try', 'coming-soon' ), ), 'image' => 'pe/pe-support.png', 'comparison' => array( 'title' => __( 'Support Comparison', 'coming-soon' ), 'headers' => array( __( 'Support Feature', 'coming-soon' ), __( 'Free Version', 'coming-soon' ), __( 'Pro Version', 'coming-soon' ), ), 'rows' => array( array( __( 'Support Channel', 'coming-soon' ), __( 'WordPress.org Forums', 'coming-soon' ), __( 'Priority Email Support', 'coming-soon' ), ), array( __( 'Response Time', 'coming-soon' ), __( 'Community-based', 'coming-soon' ), __( 'Within 24 hours', 'coming-soon' ), ), array( __( 'Support Team', 'coming-soon' ), __( 'Community volunteers', 'coming-soon' ), __( 'SeedProd experts', 'coming-soon' ), ), array( __( 'Custom Solutions', 'coming-soon' ), '❌', '✅', ), array( __( 'Video Tutorials', 'coming-soon' ), __( 'Basic tutorials', 'coming-soon' ), __( 'Premium video library', 'coming-soon' ), ), array( __( 'Pro Feature Support', 'coming-soon' ), '❌', '✅', ), ), ), 'testimonial' => array( 'text' => 'A most useful, reliable, and elegant plugin. Super easy to use, mighty cool, and works sooo smoothly I cried tears of joy. All praise to the dev(s)!', 'author' => 'kados', 'company' => 'WordPress.org User', ), 'cta_headline' => __( '🎯 Get Expert Help When You Need It', 'coming-soon' ), 'feature_slug' => 'support', 'cta_context' => 'inlinehelp', // UTM medium. 'use_exact_utm_medium' => true, 'secondary_button' => array( 'text' => __( 'Continue to Free Community Support', 'coming-soon' ), 'url' => 'https://wordpress.org/support/plugin/coming-soon/', 'icon' => 'dashicons-groups', 'new_tab' => true, ), ); ?>
' . esc_html__( 'Settings', 'coming-soon' ) . ''; array_unshift( $links, $settings_link ); // Add Upgrade link for Lite version. if ( 'lite' === SEEDPROD_BUILD ) { $upgrade_url = seedprod_lite_get_external_link( 'https://www.seedprod.com/lite-upgrade/', 'plugin-actions-upgrade-link', 'liteplugin' ); $upgrade_link = '' . esc_html__( 'Upgrade to Pro', 'coming-soon' ) . ''; array_unshift( $links, $upgrade_link ); } } return $links; } }