diff --git a/app/views/stats/index.phtml b/app/views/stats/index.phtml index 0d144fcd5..3a5db2fb8 100644 --- a/app/views/stats/index.phtml +++ b/app/views/stats/index.phtml @@ -96,19 +96,68 @@ + An array of HSL color strings. + */ +function generateColorPalette(int $count): array { + $colors = []; + for ($i = 0; $i < $count; $i++) { + $hue = ($i / $count) * 360; // Distribute colors evenly around the color wheel + $saturation = 70; // Fixed saturation + $lightness = 50; // Fixed lightness + $colors[] = "hsl($hue, {$saturation}%, {$lightness}%)"; + } + return $colors; +} + +// 1. Get all unique category labels and sort them +$allLabels = array_unique(array_merge($this->feedByCategory['label'], $this->entryByCategory['label'])); +sort($allLabels); // Ensure consistent order + +// 2. Generate a color palette based on the number of unique categories +$colorPalette = generateColorPalette(count($allLabels)); + +// 3. Map categories to colors +$colorMap = array_combine($allLabels, $colorPalette); + +// 4. Align data and labels for both charts +$feedData = array_fill_keys($allLabels, 0); // Initialize data with all categories +foreach ($this->feedByCategory['label'] as $index => $label) { + $feedData[$label] = $this->feedByCategory['data'][$index]; +} +$entryData = array_fill_keys($allLabels, 0); // Initialize data with all categories +foreach ($this->entryByCategory['label'] as $index => $label) { + $entryData[$label] = $this->entryByCategory['data'][$index]; +} + +// Final data and labels +$feedLabels = array_keys($feedData); +$feedColors = array_map(fn($label) => $colorMap[$label], $feedLabels); +$feedValues = array_values($feedData); + +$entryLabels = array_keys($entryData); +$entryColors = array_map(fn($label) => $colorMap[$label], $entryLabels); +$entryValues = array_values($entryData); +?> +