$data) { $month[] = '"'.$key.'"'; $openMonth[] = '"'.$data['open'].'"'; $clickMonth[] = '"'.$data['click'].'"'; } $day = []; $openDay = []; $clickDay = []; foreach ($dataDay as $key => $data) { $day[] = '"'.$key.'"'; $openDay[] = '"'.$data['open'].'"'; $clickDay[] = '"'.$data['click'].'"'; } $hour = []; $openHour = []; $clickHour = []; foreach ($dataHour as $key => $data) { $hour[] = '"'.$key.'"'; $openHour[] = '"'.$data['open'].'"'; $clickHour[] = '"'.$data['click'].'"'; } $randNumber = rand(1000, 9000); $idCanvas = 'acy_canvas_rand_id'.$randNumber; $idLegend = 'acy_legend_rand_id'.$randNumber; $return = ''; $nbDataDay = count($dataDay); $nbDataHour = count($dataHour); $selectedChartHour = ""; $selectedChartDay = ""; $selectedChartMonth = ""; if ($nbDataHour < 49) { $selectedChartHour = "selected__choose_by"; $displayed = $hour; $clickDisplayed = $clickHour; $openDisplayed = $openHour; } elseif ($nbDataDay < 63) { $selectedChartDay = "selected__choose_by"; $displayed = $day; $clickDisplayed = $clickDay; $openDisplayed = $openDay; } else { $selectedChartMonth = "selected__choose_by"; $displayed = $month; $clickDisplayed = $clickMonth; $openDisplayed = $openMonth; } $return .= '

'.acym_translation('ACYM_BY_MONTH').'

'.acym_translation('ACYM_BY_DAY').'

'.acym_translation('ACYM_BY_HOUR').'

'; $return .= ''; return $return; } function acym_initializeChart(): void { static $loaded = false; if (!$loaded) { acym_addScript(false, ACYM_JS.'libraries/chart.min.js?v='.filemtime(ACYM_MEDIA.'js'.DS.'libraries'.DS.'chart.min.js'), ['defer' => false, 'needTagScript' => true]); $loaded = true; } } function acym_roundChart($percentage, string $type = '', string $class = '', string $topLabel = ''): string { if (empty($percentage) && $percentage !== 0) { return ''; } acym_initializeChart(); $randNumber = rand(1000, 9000); $id = 'acy_round_chart_rand_id'.$randNumber; $idCanvas = 'acy_canvas_rand_id'.$randNumber; $green = '#3dea91'; $red = '#ff5259'; $orange = '#ffab15'; $defaultColor = '#00a4ff'; $isFixColor = false; $isInverted = false; switch ($type) { case 'click': $valueHigh = 5; $valueLow = 1; break; case 'open': $valueHigh = 30; $valueLow = 18; break; case 'delivery': $valueHigh = 90; $valueLow = 70; break; case 'fail': $valueHigh = 30; $valueLow = 10; $isInverted = true; break; case 'unsubscribe': $valueHigh = 10; $valueLow = 1; $isInverted = true; break; default: $isFixColor = true; } $color = $defaultColor; if (!$isFixColor) { if ($percentage >= $valueHigh) { $color = $isInverted ? $red : $green; } elseif ($percentage < $valueHigh && $percentage >= $valueLow) { $color = $orange; } elseif ($percentage < $valueLow) { $color = $isInverted ? $green : $red; } } $return = '

'.$topLabel.'

'; $return .= ''; return $return; } function acym_pieChart(array $data = [], string $class = '', string $topLabel = '', bool $cap = true, bool $perList = false): string { if (empty($data)) { return ''; } acym_initializeChart(); $randNumber = rand(1000, 9000); $id = 'acy_pie_chart_rand_id'.$randNumber; $idCanvas = 'acy_canvas_rand_id'.$randNumber; $idLegend = 'acy_legend_rand_id'.$randNumber; $allLabelsArray = []; $colors = []; asort($data); $data = array_reverse($data, true); if (isset($data['ACYM_OTHER'])) { $otherValue = $data['ACYM_OTHER']; unset($data['ACYM_OTHER']); $data['ACYM_OTHER'] = $otherValue; } $position = 0; $othersValue = 0; $nbOthers = 0; if ($perList) { foreach ($data as $itemId => $item) { if ($position > 9 && $cap) { $othersValue += (float)$item['value']; unset($data[$itemId]); $nbOthers++; continue; } $data[$itemId] = (float)$item['value']; $allLabelsArray[] = $item['label']; $colors[] = $item['color']; $position++; } if ($othersValue > 0) { $othersValue = $othersValue / $nbOthers; } } else { foreach ($data as $label => $number) { if ($position > 9 && $cap) { $othersValue += (float)$number; unset($data[$label]); continue; } $data[$label] = (float)$number; $allLabelsArray[] = acym_translation($label); $colors[] = acym_getChartColor($position); $position++; } } if ($othersValue > 0) { $data['ACYM_OTHER'] = $othersValue; $allLabelsArray[] = acym_translation('ACYM_OTHER'); $colors[] = acym_getChartColor($position); } $allNumbers = implode(',', $data); $allLabels = "'".implode("', '", $allLabelsArray)."'"; $allColors = "'".implode("', '", $colors)."'"; $return = '

'.$topLabel.'

'; $return .= ''; return $return; } function acym_barChart(array $data = [], string $topLabel = ''): string { if (empty($data)) { return ''; } acym_initializeChart(); $randNumber = rand(1000, 9000); $id = 'acy_pie_chart_rand_id'.$randNumber; $idCanvas = 'acy_canvas_rand_id'.$randNumber; $idLegend = 'acy_legend_rand_id'.$randNumber; $allLabelsArray = []; $colors = []; asort($data); $data = array_reverse($data, true); $position = 0; $cappedValue = 0; $nbOther = 0; foreach ($data as $itemId => $item) { if ($position > 9) { $cappedValue += (float)$item['value']; unset($data[$itemId]); $nbOther++; continue; } $data[$itemId] = (float)$item['value']; $allLabelsArray[] = $item['label']; $colors[] = $item['color']; $position++; } if ($cappedValue > 0) { $cappedValue = $cappedValue / $nbOther; $data[acym_translation('ACYM_OTHER')] = $cappedValue; $allLabelsArray[] = acym_translation('ACYM_OTHER'); $colors[] = acym_getChartColor($position); } $allNumbers = implode(',', $data); $allLabels = "'".implode("', '", $allLabelsArray)."'"; $allColors = "'".implode("', '", $colors)."'"; $return = '

'.$topLabel.'

'; $return .= ''; return $return; } function acym_getChartColor(int $position): string { $colors = [ '#845EC2', '#D65DB1', '#FF6F91', '#FF9671', '#FFC75F', '#F9F871', '#8BE884', '#00CFA9', '#00AFC6', '#008AC9', '#2261AC', ]; return $colors[$position % 11]; }