From f58eb87131040edf4651b521ff1ef88e5cbe181f Mon Sep 17 00:00:00 2001 From: Jeppe Bundgaard Date: Mon, 26 Jan 2026 19:43:52 +0100 Subject: [PATCH] Add `progress_alert_frequency` to `goals_criteria` with JSON parsing and export support - Introduce `goals_criteria_progress_alert_frequency` property in `goals_criteria` class to handle alert frequencies. - Extend `fromJson` to parse `progress_alert_frequency` with support for camelCase input. - Update `toArray` to include `progress_alert_frequency` in serialized output. --- .../modules/goals/classes/goals_criteria.php | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/services/nginx/app/modules/goals/classes/goals_criteria.php b/services/nginx/app/modules/goals/classes/goals_criteria.php index 3c0f22da..a2d098bf 100644 --- a/services/nginx/app/modules/goals/classes/goals_criteria.php +++ b/services/nginx/app/modules/goals/classes/goals_criteria.php @@ -3,6 +3,7 @@ namespace goals\classes; use goals\helpers\goals_criteria_type; +use goals\helpers\goals_criteria_progress_alert_frequency; use goals\interfaces\goals_criteria_i; use goals\traits\goals_result_parser_t; use goals\traits\goals_target_t; @@ -36,6 +37,11 @@ class goals_criteria implements goals_criteria_i * @var goals_criteria_products|null $products */ public ?goals_criteria_products $products; + /** + * Progress alert frequency for the goal + * @var goals_criteria_progress_alert_frequency $progress_alert_frequency + */ + public goals_criteria_progress_alert_frequency $progress_alert_frequency; /** * Constructor */ @@ -46,6 +52,7 @@ class goals_criteria implements goals_criteria_i $this->products = new goals_criteria_products(); $this->start = new \DateTime(); $this->end = new \DateTime(); + $this->progress_alert_frequency = goals_criteria_progress_alert_frequency::NONE; } @@ -89,6 +96,19 @@ class goals_criteria implements goals_criteria_i $criteria->label = ($label === '') ? null : $label; } + // Parse progress alert frequency (ignore unknowns) + if (isset($data['progress_alert_frequency']) && is_string($data['progress_alert_frequency'])) { + $freq = goals_criteria_progress_alert_frequency::tryFrom($data['progress_alert_frequency']); + if ($freq !== null) { + $criteria->progress_alert_frequency = $freq; + } + } elseif (isset($data['progressAlertFrequency']) && is_string($data['progressAlertFrequency'])) { // allow camelCase + $freq = goals_criteria_progress_alert_frequency::tryFrom($data['progressAlertFrequency']); + if ($freq !== null) { + $criteria->progress_alert_frequency = $freq; + } + } + // Parse timeframe with validation if (isset($data['start']) && is_string($data['start'])) { try { @@ -229,6 +249,7 @@ class goals_criteria implements goals_criteria_i 'users' => $users, 'departments' => $departments, 'products' => $products, + 'progress_alert_frequency' => $this->progress_alert_frequency?->name ?? goals_criteria_progress_alert_frequency::NONE->name, ]; }