plugin_url = AIRSREFE_PLUGIN_URL; $this->plugin_version = AIRSREFE_VERSION; add_action('admin_enqueue_scripts', [$this, 'enqueue_admin_assets']); add_action('wp_enqueue_scripts', [$this, 'enqueue_frontend_assets']); } /** * Enqueue admin assets based on current page */ public function enqueue_admin_assets($hook) { // Only load on our plugin pages if (!$this->is_plugin_page()) { return; } // Enqueue common admin assets $this->enqueue_common_admin_assets(); // Enqueue page-specific assets $this->enqueue_page_specific_assets($hook); } /** * Enqueue frontend assets (if any) */ public function enqueue_frontend_assets() { // Currently no frontend assets, but structure is ready } /** * Check if current page is a plugin page */ private function is_plugin_page() { // Check if user has admin capabilities if (!current_user_can('manage_options')) { return false; } // Use WordPress function to get current screen $screen = get_current_screen(); if (!$screen || !isset($screen->id)) { return false; } return strpos($screen->id, 'ai-rss-rewriter') !== false; } /** * Enqueue common admin assets */ private function enqueue_common_admin_assets() { // Get assets URL from uploads directory $assets_url = function_exists('airsrefe_get_assets_url') ? airsrefe_get_assets_url() : $this->plugin_url . 'assets/'; // Main admin styles wp_enqueue_style( 'airsrefe-admin-modern', $assets_url . 'admin-modern.css', [], $this->plugin_version ); // Admin interface styles wp_enqueue_style( 'airsrefe-admin-interface', $assets_url . 'admin-interface.css', [], $this->plugin_version ); // Prompts styles (always load for main page) wp_enqueue_style( 'airsrefe-prompts', $assets_url . 'css/admin/prompts.css', ['airsrefe-admin-modern'], $this->plugin_version ); // Inline styles for prompts wp_enqueue_style( 'airsrefe-inline-styles', $assets_url . 'css/admin/inline-styles.css', ['airsrefe-prompts'], $this->plugin_version ); // Main admin JavaScript wp_enqueue_script( 'airsrefe-admin-modern', $assets_url . 'admin-modern.js', ['jquery'], $this->plugin_version, true ); // Prompts JavaScript (always load for main page) wp_enqueue_script( 'airsrefe-prompts', $assets_url . 'js/admin/prompts.js', ['jquery'], $this->plugin_version, true ); // Localize script with AJAX data and translations wp_localize_script('airsrefe-admin-modern', 'airsrefe_ajax', [ 'ajaxurl' => admin_url('admin-ajax.php'), 'nonce' => wp_create_nonce('airsrefe_ajax'), 'strings' => [ 'processing' => __('Processing...', 'ai-rss-rewriter'), 'refreshing' => __('Refreshing...', 'ai-rss-rewriter'), 'running' => __('Running...', 'ai-rss-rewriter'), 'pleaseSelectAction' => __('Please select an action', 'ai-rss-rewriter'), 'pleaseSelectFeed' => __('Please select at least one feed', 'ai-rss-rewriter'), 'securityCheckFailed' => __('Security check failed. Please refresh the page and try again.', 'ai-rss-rewriter'), 'invalidFormAction' => __('Invalid form action. Please refresh the page and try again.', 'ai-rss-rewriter'), 'noValidFeeds' => __('No valid feeds selected. Please refresh the page and try again.', 'ai-rss-rewriter'), 'deleteConfirm' => __('Delete selected feeds? This action cannot be undone.', 'ai-rss-rewriter'), 'feedStatusUpdated' => __('Feed status updated', 'ai-rss-rewriter'), 'unknownError' => __('Unknown error', 'ai-rss-rewriter'), 'connectionError' => __('Connection error', 'ai-rss-rewriter'), 'copied' => __('Copied!', 'ai-rss-rewriter'), 'copyFailed' => __('Copy failed - please select text manually', 'ai-rss-rewriter'), 'copyFailedManual' => __('Copy failed - please select text manually and press Ctrl+C', 'ai-rss-rewriter'), 'feedOrderUpdated' => __('Feed order updated', 'ai-rss-rewriter'), 'fillRequiredFields' => __('Please fill in all required fields', 'ai-rss-rewriter'), 'areYouSure' => __('Are you sure?', 'ai-rss-rewriter') ] ]); // Localize prompts script with translations wp_localize_script('airsrefe-prompts', 'airsrefe_prompts', [ 'resetConfirm' => __('Reset all prompts to defaults? This will overwrite any custom changes.', 'ai-rss-rewriter'), 'resetFailed' => __('Reset failed', 'ai-rss-rewriter'), 'saving' => __('Saving...', 'ai-rss-rewriter'), 'saveFailed' => __('Save failed', 'ai-rss-rewriter'), 'editPrompt' => __('Edit Prompt', 'ai-rss-rewriter'), 'loadFailed' => __('Could not load prompt', 'ai-rss-rewriter') ]); } /** * Enqueue page-specific assets */ private function enqueue_page_specific_assets($hook) { // Check if user has admin capabilities if (!current_user_can('manage_options')) { return; } // Use WordPress function to get current screen $screen = get_current_screen(); if (!$screen || !isset($screen->id)) { return; } $page = $screen->id; // Get tab parameter safely $tab = ''; // phpcs:disable WordPress.Security.NonceVerification.Recommended -- Tab parameter is used only for asset loading, not for security-sensitive operations if (isset($_GET['tab'])) { $tab = sanitize_text_field(wp_unslash($_GET['tab'])); } // phpcs:enable WordPress.Security.NonceVerification.Recommended switch ($page) { case 'ai-rss-rewriter': $this->enqueue_main_page_assets($tab, $page); break; case 'ai-rss-rewriter-settings': $this->enqueue_settings_assets(); break; case 'ai-rss-rewriter-prompts': $this->enqueue_prompts_assets(); break; } } /** * Enqueue main page assets */ private function enqueue_main_page_assets($tab, $page) { // Get assets URL from uploads directory $assets_url = function_exists('airsrefe_get_assets_url') ? airsrefe_get_assets_url() : $this->plugin_url . 'assets/'; // Dashboard styles wp_enqueue_style( 'airsrefe-dashboard', $assets_url . 'css/admin/dashboard.css', ['airsrefe-admin-modern'], $this->plugin_version ); // Modal functionality wp_enqueue_script( 'airsrefe-modal', $assets_url . 'js/admin/modal.js', ['jquery'], $this->plugin_version, true ); // Feed management wp_enqueue_script( 'airsrefe-feed-management', $assets_url . 'js/admin/feed-management.js', ['jquery'], $this->plugin_version, true ); // Logs functionality if ($tab === 'logs') { wp_enqueue_script( 'airsrefe-logs', $assets_url . 'js/admin/logs.js', ['jquery'], $this->plugin_version, true ); // Localize logs script with translations wp_localize_script('airsrefe-logs', 'airsrefe_logs', [ 'copied' => __('Copied!', 'ai-rss-rewriter'), 'copyLog' => __('Copy Log', 'ai-rss-rewriter'), 'copyFailed' => __('Copy failed', 'ai-rss-rewriter'), 'copyFailedManual' => __('Copy failed - please select text manually', 'ai-rss-rewriter') ]); } // Settings functionality - check for settings tab or always load for main page if ($tab === 'settings' || empty($tab)) { $this->enqueue_settings_assets(); } // Prompts functionality - check for prompts tab or prompts page if ($tab === 'prompts' || ($page && $page === 'ai-rss-rewriter-prompts')) { $this->enqueue_prompts_assets(); } // Always load prompts assets on main page to ensure they're available if ($page === 'ai-rss-rewriter') { $this->enqueue_prompts_assets(); } } /** * Enqueue settings page assets */ private function enqueue_settings_assets() { // Get assets URL from uploads directory $assets_url = function_exists('airsrefe_get_assets_url') ? airsrefe_get_assets_url() : $this->plugin_url . 'assets/'; // Settings styles wp_enqueue_style( 'airsrefe-settings', $assets_url . 'css/admin/settings.css', ['airsrefe-admin-modern'], $this->plugin_version ); // Inline styles conversion wp_enqueue_style( 'airsrefe-inline-styles', $assets_url . 'css/admin/inline-styles.css', ['airsrefe-settings'], $this->plugin_version ); // Settings JavaScript wp_enqueue_script( 'airsrefe-settings-admin', $assets_url . 'settings-admin.js', ['jquery'], $this->plugin_version, true ); // Localize script with settings data wp_localize_script('airsrefe-settings-admin', 'airsrefe_settings_data', [ 'current_language' => get_option('airsrefe_plugin_language', 'en'), 'ajax_url' => admin_url('admin-ajax.php'), 'nonce' => wp_create_nonce('airsrefe_ajax') ]); // Add dynamic settings styles $this->add_dynamic_settings_styles(); } /** * Enqueue prompts page assets */ private function enqueue_prompts_assets() { // Check if already enqueued to avoid duplicates if (wp_style_is('airsrefe-prompts', 'enqueued')) { return; } // Get assets URL from uploads directory $assets_url = function_exists('airsrefe_get_assets_url') ? airsrefe_get_assets_url() : $this->plugin_url . 'assets/'; // Prompts styles wp_enqueue_style( 'airsrefe-prompts', $assets_url . 'css/admin/prompts.css', ['airsrefe-admin-modern'], $this->plugin_version ); // Also enqueue inline styles for prompts wp_enqueue_style( 'airsrefe-inline-styles', $assets_url . 'css/admin/inline-styles.css', ['airsrefe-prompts'], $this->plugin_version ); // Prompts JavaScript wp_enqueue_script( 'airsrefe-prompts', $assets_url . 'js/admin/prompts.js', ['jquery'], $this->plugin_version, true ); // Localize prompts script with translations wp_localize_script('airsrefe-prompts', 'airsrefe_prompts', [ 'resetConfirm' => __('Reset all prompts to defaults? This will overwrite any custom changes.', 'ai-rss-rewriter'), 'resetFailed' => __('Reset failed', 'ai-rss-rewriter'), 'saving' => __('Saving...', 'ai-rss-rewriter'), 'saveFailed' => __('Save failed', 'ai-rss-rewriter'), 'editPrompt' => __('Edit Prompt', 'ai-rss-rewriter'), 'loadFailed' => __('Could not load prompt', 'ai-rss-rewriter') ]); } /** * Add dynamic settings styles */ private function add_dynamic_settings_styles() { $extract_full_content = get_option('airsrefe_extract_full_content', 1); if (!$extract_full_content) { $dynamic_css = ".extraction-option { display: none; }"; wp_add_inline_style('airsrefe-inline-styles', $dynamic_css); } } } // Initialize the assets manager new AIRSREFE_Assets_Manager();