| @@ -255,12 +255,19 @@ | ||
| 255 | 255 | $element->open = 0; |
| 256 | 256 | $element->click = 0; |
| 257 | 257 | |
| 258 | 258 | if (!empty($element->subscribers)) { |
| 259 | - $element->open = number_format($element->open_unique / $element->subscribers * 100, 2); | |
| 259 | + // In anonymous mode opens/clicks are counted globally (totals, not unique subscribers), so a percentage of recipients is meaningless: expose the average number of opens/clicks per email sent instead (e.g. 3.25), rendered as "3.25×" in the view | |
| 260 | + $anonymousStats = !empty($this->config->get('anonymous_stats', 0)); | |
| 261 | + $clicksNb = $urlClickClass->getNumberUsersClicked([$element->mail_id], $isAbTest); | |
| 260 | 262 | |
| 261 | - $clicksNb = $urlClickClass->getNumberUsersClicked([$element->mail_id], $isAbTest); | |
| 262 | - $element->click = number_format($clicksNb / $element->subscribers * 100, 2); | |
| 263 | + if ($anonymousStats) { | |
| 264 | + $element->open = number_format($element->open_unique / $element->subscribers, 2); | |
| 265 | + $element->click = number_format($clicksNb / $element->subscribers, 2); | |
| 266 | + } else { | |
| 267 | + $element->open = number_format($element->open_unique / $element->subscribers * 100, 2); | |
| 268 | + $element->click = number_format($clicksNb / $element->subscribers * 100, 2); | |
| 269 | + } | |
| 263 | 270 | } |
| 264 | 271 | } |
| 265 | 272 | |
| 266 | 273 | public function getTrackingSales(object $element): void |
| @@ -305,10 +312,18 @@ | ||
| 305 | 312 | $element->subscribers += $mailsStat->sent; |
| 306 | 313 | } |
| 307 | 314 | |
| 308 | 315 | if (!empty($element->subscribers)) { |
| 309 | - $element->open = number_format($element->open / $element->subscribers * 100, 2); | |
| 310 | - $element->click = number_format($element->click / $element->subscribers * 100, 2); | |
| 316 | + // In anonymous mode opens/clicks are counted globally (totals, not unique subscribers), so expose the average number of opens/clicks per email sent (e.g. 3.25) instead of a percentage, rendered as "3.25×" in the view | |
| 317 | + $anonymousStats = !empty($this->config->get('anonymous_stats', 0)); | |
| 318 | + | |
| 319 | + if ($anonymousStats) { | |
| 320 | + $element->open = number_format($element->open / $element->subscribers, 2); | |
| 321 | + $element->click = number_format($element->click / $element->subscribers, 2); | |
| 322 | + } else { | |
| 323 | + $element->open = number_format($element->open / $element->subscribers * 100, 2); | |
| 324 | + $element->click = number_format($element->click / $element->subscribers * 100, 2); | |
| 325 | + } | |
| 311 | 326 | } |
| 312 | 327 | |
| 313 | 328 | //Tracking sales |
| 314 | 329 | if (!acym_isTrackingSalesActive()) { |