fix: address QA P1 + P2 findings from 9aa5309 review
P1 fix: Add class_exists() guard in PRC_Preset_Provider before instantiating PR Core repository classes. If PR Core constant is defined but classes fail to autoload, fall back to defaults instead of crashing. P2 fixes: - Remove unused nonce from wp_localize_script (all endpoints public) - Add cross-reference comments pinning SYRINGE_UNITS_PER_ML across PRC_Math, calculator.js, and prcConfig.syringeUnits QA verdict: qa-reviews/peptide-reconstitution-calculator/2026-04-17-9aa5309.md Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2
assets/js/calculator.js
Normal file → Executable file
2
assets/js/calculator.js
Normal file → Executable file
@@ -15,6 +15,8 @@
|
|||||||
|
|
||||||
/* ── Constants ────────────────────────────────────────────────────── */
|
/* ── Constants ────────────────────────────────────────────────────── */
|
||||||
|
|
||||||
|
// Must match PRC_Math::SYRINGE_UNITS_PER_ML in class-prc-math.php
|
||||||
|
// and prcConfig.syringeUnits in class-prc-shortcode.php.
|
||||||
var SYRINGE_UNITS_PER_ML = 100;
|
var SYRINGE_UNITS_PER_ML = 100;
|
||||||
|
|
||||||
/* ── State ────────────────────────────────────────────────────────── */
|
/* ── State ────────────────────────────────────────────────────────── */
|
||||||
|
|||||||
4
includes/class-prc-math.php
Normal file → Executable file
4
includes/class-prc-math.php
Normal file → Executable file
@@ -25,6 +25,10 @@ class PRC_Math {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Standard insulin syringe size in units (100 IU = 1 mL).
|
* Standard insulin syringe size in units (100 IU = 1 mL).
|
||||||
|
*
|
||||||
|
* Mirrored in: assets/js/calculator.js (SYRINGE_UNITS_PER_ML)
|
||||||
|
* and prcConfig.syringeUnits (class-prc-shortcode.php).
|
||||||
|
* All three MUST stay in sync.
|
||||||
*/
|
*/
|
||||||
private const SYRINGE_UNITS_PER_ML = 100;
|
private const SYRINGE_UNITS_PER_ML = 100;
|
||||||
|
|
||||||
|
|||||||
7
includes/class-prc-preset-provider.php
Normal file → Executable file
7
includes/class-prc-preset-provider.php
Normal file → Executable file
@@ -85,6 +85,13 @@ class PRC_Preset_Provider {
|
|||||||
* @return array<int, array<string, mixed>>
|
* @return array<int, array<string, mixed>>
|
||||||
*/
|
*/
|
||||||
private function build_presets_from_pr_core(): array {
|
private function build_presets_from_pr_core(): array {
|
||||||
|
// Why class_exists: PR_CORE_VERSION constant may be defined but classes
|
||||||
|
// could fail to autoload (e.g. fatal error in PR Core bootstrap).
|
||||||
|
// Fall back to empty array so the caller merges in defaults gracefully.
|
||||||
|
if ( ! class_exists( 'PR_Core_Peptide_Repository' ) || ! class_exists( 'PR_Core_Dosing_Repository' ) ) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
$peptide_repo = new PR_Core_Peptide_Repository();
|
$peptide_repo = new PR_Core_Peptide_Repository();
|
||||||
$dosing_repo = new PR_Core_Dosing_Repository();
|
$dosing_repo = new PR_Core_Dosing_Repository();
|
||||||
|
|
||||||
|
|||||||
6
includes/frontend/class-prc-shortcode.php
Normal file → Executable file
6
includes/frontend/class-prc-shortcode.php
Normal file → Executable file
@@ -93,13 +93,13 @@ class PRC_Shortcode {
|
|||||||
true
|
true
|
||||||
);
|
);
|
||||||
|
|
||||||
// Pass presets and config to JS.
|
// Pass presets and config to JS — all REST endpoints are public-read,
|
||||||
|
// so no nonce is needed. The restUrl is provided for future use.
|
||||||
$provider = new PRC_Preset_Provider();
|
$provider = new PRC_Preset_Provider();
|
||||||
wp_localize_script( 'prc-calculator', 'prcConfig', [
|
wp_localize_script( 'prc-calculator', 'prcConfig', [
|
||||||
'presets' => $provider->get_all_presets(),
|
'presets' => $provider->get_all_presets(),
|
||||||
'restUrl' => esc_url_raw( rest_url( 'prc/v1' ) ),
|
'restUrl' => esc_url_raw( rest_url( 'prc/v1' ) ),
|
||||||
'nonce' => wp_create_nonce( 'wp_rest' ),
|
'syringeUnits' => 100, // Must match PRC_Math::SYRINGE_UNITS_PER_ML and calculator.js SYRINGE_UNITS_PER_ML.
|
||||||
'syringeUnits' => 100,
|
|
||||||
'i18n' => [
|
'i18n' => [
|
||||||
'selectPeptide' => __( 'Select a peptide…', 'peptide-reconstitution-calculator' ),
|
'selectPeptide' => __( 'Select a peptide…', 'peptide-reconstitution-calculator' ),
|
||||||
'customEntry' => __( 'Custom / Manual Entry', 'peptide-reconstitution-calculator' ),
|
'customEntry' => __( 'Custom / Manual Entry', 'peptide-reconstitution-calculator' ),
|
||||||
|
|||||||
Reference in New Issue
Block a user