From 04b90e2e2d69b2c773b587f00eba7ea1f45263ba Mon Sep 17 00:00:00 2001 From: peptiderepo Date: Thu, 16 Apr 2026 22:43:50 +0700 Subject: [PATCH] =?UTF-8?q?refactor(admin):=20extract=20filter=20field=20r?= =?UTF-8?q?enderers=20(325=20=E2=86=92=20249=20+=20103=20lines)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Move 7 content-filter settings field renderers into dedicated Peptide_News_Admin_Filter_Field_Renderers class. Main field renderers file drops from 325 to 249 lines with backward- compatible one-liner proxies. Co-Authored-By: Claude Opus 4.6 --- admin/class-pn-admin-field-renderers.php | 92 ++-------------- .../class-pn-admin-filter-field-renderers.php | 103 ++++++++++++++++++ includes/class-peptide-news.php | 1 + 3 files changed, 112 insertions(+), 84 deletions(-) create mode 100644 admin/class-pn-admin-filter-field-renderers.php diff --git a/admin/class-pn-admin-field-renderers.php b/admin/class-pn-admin-field-renderers.php index 87a852c..84d4b43 100644 --- a/admin/class-pn-admin-field-renderers.php +++ b/admin/class-pn-admin-field-renderers.php @@ -144,91 +144,15 @@ class Peptide_News_Admin_Field_Renderers { ); } - public static function render_filter_enabled_field(): void { - $value = get_option( 'peptide_news_filter_enabled', 1 ); - printf( - '', - checked( $value, 1, false ), - esc_html__( 'Filter out ads, press releases, and promotional content during fetch', 'peptide-news' ) - ); - } + // ── Filter field proxies — @see Peptide_News_Admin_Filter_Field_Renderers ── - public static function render_filter_sensitivity_field(): void { - $value = get_option( 'peptide_news_filter_sensitivity', 'moderate' ); - $options = array( - 'strict' => __( 'Strict — block aggressively (may catch some legitimate articles)', 'peptide-news' ), - 'moderate' => __( 'Moderate — balanced filtering (recommended)', 'peptide-news' ), - 'lenient' => __( 'Lenient — only block obvious promotional content', 'peptide-news' ), - ); - - echo ''; - } - - public static function render_filter_llm_enabled_field(): void { - $value = get_option( 'peptide_news_filter_llm_enabled', 0 ); - printf( - '', - checked( $value, 1, false ), - esc_html__( 'Use LLM to classify borderline articles (requires AI Analysis to be enabled)', 'peptide-news' ) - ); - } - - public static function render_filter_llm_model_field(): void { - $value = get_option( 'peptide_news_filter_llm_model', '' ); - printf( - '', - esc_attr( $value ) - ); - echo '

' . esc_html__( 'OpenRouter model for content classification. Leave blank to use the Keywords Model above.', 'peptide-news' ) . '

'; - } - - public static function render_filter_title_keywords_field(): void { - $value = get_option( 'peptide_news_filter_title_keywords', '' ); - $placeholder = class_exists( 'Peptide_News_Content_Filter' ) - ? Peptide_News_Content_Filter::get_default_title_keywords_text() - : ''; - printf( - '', - esc_attr( $placeholder ), - esc_textarea( $value ) - ); - echo '

' . esc_html__( 'One keyword/phrase per line. Articles with these in the title are blocked. Leave empty to use built-in defaults.', 'peptide-news' ) . '

'; - } - - public static function render_filter_body_keywords_field(): void { - $value = get_option( 'peptide_news_filter_body_keywords', '' ); - $placeholder = class_exists( 'Peptide_News_Content_Filter' ) - ? Peptide_News_Content_Filter::get_default_body_keywords_text() - : ''; - printf( - '', - esc_attr( $placeholder ), - esc_textarea( $value ) - ); - echo '

' . esc_html__( 'One keyword/phrase per line. Multiple matches in article body trigger filtering (threshold depends on sensitivity). Leave empty to use built-in defaults.', 'peptide-news' ) . '

'; - } - - public static function render_filter_blocked_domains_field(): void { - $value = get_option( 'peptide_news_filter_blocked_domains', '' ); - $placeholder = class_exists( 'Peptide_News_Content_Filter' ) - ? Peptide_News_Content_Filter::get_default_blocked_domains_text() - : ''; - printf( - '', - esc_attr( $placeholder ), - esc_textarea( $value ) - ); - echo '

' . esc_html__( 'One domain per line. Articles from these sources are always blocked. Leave empty to use built-in defaults.', 'peptide-news' ) . '

'; - } + public static function render_filter_enabled_field(): void { Peptide_News_Admin_Filter_Field_Renderers::render_filter_enabled_field(); } + public static function render_filter_sensitivity_field(): void { Peptide_News_Admin_Filter_Field_Renderers::render_filter_sensitivity_field(); } + public static function render_filter_llm_enabled_field(): void { Peptide_News_Admin_Filter_Field_Renderers::render_filter_llm_enabled_field(); } + public static function render_filter_llm_model_field(): void { Peptide_News_Admin_Filter_Field_Renderers::render_filter_llm_model_field(); } + public static function render_filter_title_keywords_field(): void { Peptide_News_Admin_Filter_Field_Renderers::render_filter_title_keywords_field(); } + public static function render_filter_body_keywords_field(): void { Peptide_News_Admin_Filter_Field_Renderers::render_filter_body_keywords_field(); } + public static function render_filter_blocked_domains_field(): void { Peptide_News_Admin_Filter_Field_Renderers::render_filter_blocked_domains_field(); } public static function render_llm_enabled_field(): void { $value = get_option( 'peptide_news_llm_enabled', 0 ); diff --git a/admin/class-pn-admin-filter-field-renderers.php b/admin/class-pn-admin-filter-field-renderers.php new file mode 100644 index 0000000..b6003dc --- /dev/null +++ b/admin/class-pn-admin-filter-field-renderers.php @@ -0,0 +1,103 @@ + %s', + checked( $value, 1, false ), + esc_html__( 'Filter out ads, press releases, and promotional content during fetch', 'peptide-news' ) + ); + } + + public static function render_filter_sensitivity_field(): void { + $value = get_option( 'peptide_news_filter_sensitivity', 'moderate' ); + $options = array( + 'strict' => __( 'Strict — block aggressively (may catch some legitimate articles)', 'peptide-news' ), + 'moderate' => __( 'Moderate — balanced filtering (recommended)', 'peptide-news' ), + 'lenient' => __( 'Lenient — only block obvious promotional content', 'peptide-news' ), + ); + + echo ''; + } + + public static function render_filter_llm_enabled_field(): void { + $value = get_option( 'peptide_news_filter_llm_enabled', 0 ); + printf( + '', + checked( $value, 1, false ), + esc_html__( 'Use LLM to classify borderline articles (requires AI Analysis to be enabled)', 'peptide-news' ) + ); + } + + public static function render_filter_llm_model_field(): void { + $value = get_option( 'peptide_news_filter_llm_model', '' ); + printf( + '', + esc_attr( $value ) + ); + echo '

' . esc_html__( 'OpenRouter model for content classification. Leave blank to use the Keywords Model above.', 'peptide-news' ) . '

'; + } + + public static function render_filter_title_keywords_field(): void { + $value = get_option( 'peptide_news_filter_title_keywords', '' ); + $placeholder = class_exists( 'Peptide_News_Content_Filter' ) + ? Peptide_News_Content_Filter::get_default_title_keywords_text() + : ''; + printf( + '', + esc_attr( $placeholder ), + esc_textarea( $value ) + ); + echo '

' . esc_html__( 'One keyword/phrase per line. Articles with these in the title are blocked. Leave empty to use built-in defaults.', 'peptide-news' ) . '

'; + } + + public static function render_filter_body_keywords_field(): void { + $value = get_option( 'peptide_news_filter_body_keywords', '' ); + $placeholder = class_exists( 'Peptide_News_Content_Filter' ) + ? Peptide_News_Content_Filter::get_default_body_keywords_text() + : ''; + printf( + '', + esc_attr( $placeholder ), + esc_textarea( $value ) + ); + echo '

' . esc_html__( 'One keyword/phrase per line. Multiple matches in article body trigger filtering (threshold depends on sensitivity). Leave empty to use built-in defaults.', 'peptide-news' ) . '

'; + } + + public static function render_filter_blocked_domains_field(): void { + $value = get_option( 'peptide_news_filter_blocked_domains', '' ); + $placeholder = class_exists( 'Peptide_News_Content_Filter' ) + ? Peptide_News_Content_Filter::get_default_blocked_domains_text() + : ''; + printf( + '', + esc_attr( $placeholder ), + esc_textarea( $value ) + ); + echo '

' . esc_html__( 'One domain per line. Articles from these sources are always blocked. Leave empty to use built-in defaults.', 'peptide-news' ) . '

'; + } +} diff --git a/includes/class-peptide-news.php b/includes/class-peptide-news.php index 184f7e1..476c0a6 100755 --- a/includes/class-peptide-news.php +++ b/includes/class-peptide-news.php @@ -55,6 +55,7 @@ class Peptide_News { require_once PEPTIDE_NEWS_PLUGIN_DIR . 'includes/class-peptide-news-cost-tracker.php'; require_once PEPTIDE_NEWS_PLUGIN_DIR . 'admin/class-pn-admin-assets.php'; require_once PEPTIDE_NEWS_PLUGIN_DIR . 'admin/class-pn-admin-menu.php'; + require_once PEPTIDE_NEWS_PLUGIN_DIR . 'admin/class-pn-admin-filter-field-renderers.php'; require_once PEPTIDE_NEWS_PLUGIN_DIR . 'admin/class-pn-admin-field-renderers.php'; require_once PEPTIDE_NEWS_PLUGIN_DIR . 'admin/class-pn-admin-settings.php'; require_once PEPTIDE_NEWS_PLUGIN_DIR . 'admin/class-pn-admin-log-viewer.php';