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.
This commit is contained in:
Jeppe Bundgaard
2026-01-26 19:43:52 +01:00
parent da65d0decd
commit f58eb87131
@@ -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,
];
}