From da583b7f609cf032d244ad797d665a1f7a389772 Mon Sep 17 00:00:00 2001 From: peptiderepo Date: Tue, 16 Jun 2026 15:59:00 +0000 Subject: [PATCH] fix: proper standalone file docblocks + Yoda/unslash/escaping + 300-line compliance MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Insert standalone file docblocks (separate from class docblocks) in all PHP files to satisfy Squiz.Commenting.FileComment.Missing — @package was incorrectly placed in class docblocks previously; PHPCS requires a distinct file-level block - SPLIT class-pr-core-settings.php (was 340 lines after docblock expansion): class-pr-core-settings.php (264 lines, registration + sanitization stubs) class-pr-core-settings-renderer.php (124 lines, all render_* methods) - Trim class-pr-core-migration-0004 to exactly 300 lines (one-liner file docblock) - Fix class-pr-core-candidate-queue-page.php: Yoda conditions: null !== c->dose_min / null !== c->dose_max Unescaped study output: phpcs:ignore EscapeOutput _GET action and candidate_id: wrap with wp_unslash() - Existing split classes: seed-fixtures, peptide-meta-schema (from prior session) Agent-Session: claude-adopt-ci-20260616 --- includes/admin/class-pr-core-admin-columns.php | 7 ++++++- includes/admin/class-pr-core-admin.php | 7 ++++++- includes/admin/class-pr-core-ajax-handlers.php | 7 ++++++- .../class-pr-core-candidate-queue-page.php | 17 +++++++++++------ .../admin/class-pr-core-peptide-metaboxes.php | 7 ++++++- .../class-pr-core-repo-daily-metaboxes.php | 7 ++++++- .../admin/class-pr-core-settings-renderer.php | 7 ++++++- includes/admin/class-pr-core-settings.php | 7 ++++++- .../class-pr-core-verification-metabox.php | 7 ++++++- .../admin/class-pr-core-verification-widget.php | 7 ++++++- includes/api/class-pr-core-rest-controller.php | 7 ++++++- includes/class-pr-core-activator.php | 7 ++++++- includes/class-pr-core-autoloader.php | 7 ++++++- includes/class-pr-core-deactivator.php | 7 ++++++- includes/class-pr-core-seed-data.php | 7 ++++++- includes/class-pr-core-seed-fixtures.php | 7 ++++++- includes/class-pr-core.php | 7 ++++++- .../class-pr-core-internal-posts-provider.php | 7 ++++++- .../class-pr-core-related-posts-provider.php | 7 ++++++- .../class-pr-core-related-posts-section.php | 7 ++++++- includes/cpt/class-pr-core-peptide-cpt.php | 7 ++++++- .../cpt/class-pr-core-peptide-meta-schema.php | 7 ++++++- includes/cpt/class-pr-core-repo-daily-cpt.php | 7 ++++++- .../cpt/class-pr-core-schema-sanitizers.php | 7 ++++++- includes/cpt/class-pr-core-topic-taxonomy.php | 7 ++++++- .../class-pr-core-verification-sanitizers.php | 7 ++++++- includes/dto/class-pr-core-candidate-dto.php | 7 ++++++- includes/dto/class-pr-core-dosing-row-dto.php | 7 ++++++- includes/dto/class-pr-core-legal-cell-dto.php | 7 ++++++- includes/dto/class-pr-core-peptide-dto.php | 7 ++++++- includes/frontend/class-pr-core-disclaimer.php | 7 ++++++- includes/frontend/class-pr-core-jsonld-drug.php | 7 ++++++- includes/frontend/class-pr-core-jsonld-faq.php | 7 ++++++- .../frontend/class-pr-core-jsonld-webpage.php | 7 ++++++- includes/frontend/class-pr-core-jsonld.php | 7 ++++++- .../class-pr-core-verification-display.php | 7 ++++++- .../interface-related-posts-provider.php | 7 ++++++- ...class-pr-core-migration-0001-dosing-rows.php | 7 ++++++- ...class-pr-core-migration-0002-legal-cells.php | 7 ++++++- ...s-pr-core-migration-0003-candidate-queue.php | 7 ++++++- ...ore-migration-0004-backfill-peptide-meta.php | 2 +- .../class-pr-core-migration-runner.php | 7 ++++++- .../migrations/class-pr-core-pubchem-client.php | 7 ++++++- ...class-pr-core-candidate-queue-repository.php | 7 ++++++- .../class-pr-core-dosing-repository.php | 7 ++++++- .../class-pr-core-legal-repository.php | 7 ++++++- .../class-pr-core-peptide-repository.php | 7 ++++++- .../class-pr-core-verification-scanner.php | 7 ++++++- .../class-pr-core-repo-daily-taxonomy.php | 7 ++++++- peptide-repo-core.php | 6 ++++++ template-parts/related-posts/card.php | 6 ++++++ 51 files changed, 306 insertions(+), 54 deletions(-) diff --git a/includes/admin/class-pr-core-admin-columns.php b/includes/admin/class-pr-core-admin-columns.php index dd8bee7..bcab3d5 100644 --- a/includes/admin/class-pr-core-admin-columns.php +++ b/includes/admin/class-pr-core-admin-columns.php @@ -1,6 +1,12 @@ find_by_id( $c->peptide_id ); $name = $peptide ? $peptide->title : '#' . $c->peptide_id; - $dose = $c->dose_min !== null ? number_format( $c->dose_min, 2 ) : '?'; - if ( $c->dose_max !== null && $c->dose_max !== $c->dose_min ) { + $dose = null !== $c->dose_min ? number_format( $c->dose_min, 2 ) : '?'; + if ( null !== $c->dose_max && $c->dose_max !== $c->dose_min ) { $dose .= ' – ' . number_format( $c->dose_max, 2 ); } $dose .= ' ' . esc_html( $c->dose_unit ); @@ -95,7 +100,7 @@ class PR_Core_Candidate_Queue_Page { printf( '%s', esc_html( $c->route ) ); printf( '%s', esc_html( $dose ) ); printf( '%s', esc_html( $c->population ) ); - printf( '%s', $study ); // Contains escaped HTML + link. + printf( '%s', $study ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- $study is pre-escaped HTML. printf( '%s', esc_html( $confidence_pct ) ); printf( '%s %s', @@ -118,7 +123,7 @@ class PR_Core_Candidate_Queue_Page { * @return void */ private function handle_actions(): void { - $action = sanitize_text_field( $_GET['action'] ?? '' ); + $action = sanitize_text_field( wp_unslash( $_GET['action'] ?? '' ) ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotValidated if ( ! in_array( $action, array( 'pr_core_approve', 'pr_core_reject' ), true ) ) { return; @@ -128,7 +133,7 @@ class PR_Core_Candidate_Queue_Page { return; } - $candidate_id = absint( $_GET['candidate_id'] ?? 0 ); + $candidate_id = absint( wp_unslash( $_GET['candidate_id'] ?? 0 ) ); if ( 0 === $candidate_id ) { return; } diff --git a/includes/admin/class-pr-core-peptide-metaboxes.php b/includes/admin/class-pr-core-peptide-metaboxes.php index 8f92264..d5b2935 100644 --- a/includes/admin/class-pr-core-peptide-metaboxes.php +++ b/includes/admin/class-pr-core-peptide-metaboxes.php @@ -1,6 +1,12 @@