1
0
mirror of https://github.com/flarum/core.git synced 2025-07-30 21:20:24 +02:00

[statistics] fix: add missing last period to custom date ranges (#3661)

* fix: last node in previous data matches first node of current data

* fix: add previous period support for custom periods

* test: update to show previous period for custom range
This commit is contained in:
David Wheatley
2022-11-06 18:21:28 +00:00
committed by GitHub
parent 32ac0a8d8f
commit 9964ddd731
3 changed files with 13 additions and 3 deletions

View File

@@ -348,7 +348,7 @@ export default class StatisticsWidget extends DashboardWidget {
}
: this.periods![this.selectedPeriod!];
const periodLength = period.end - period.start;
const labels = [];
const labels: string[] = [];
const thisPeriod = [];
const lastPeriod = [];
@@ -373,7 +373,7 @@ export default class StatisticsWidget extends DashboardWidget {
labels.push(label);
thisPeriod.push(this.getPeriodCount(this.selectedEntity, { start: i, end: i + period.step }));
lastPeriod.push(this.getPeriodCount(this.selectedEntity, { start: i - periodLength, end: i - periodLength + period.step }));
lastPeriod.push(this.getPeriodCount(this.selectedEntity, { start: i - periodLength, end: i - periodLength }));
}
if (thisPeriod.length === 0) {

View File

@@ -126,8 +126,15 @@ class ShowStatisticsData implements RequestHandlerInterface
private function getTimedCounts(Builder $query, string $column, ?DateTime $startDate = null, ?DateTime $endDate = null)
{
$diff = $startDate && $endDate ? $startDate->diff($endDate) : null;
if (! isset($startDate)) {
$startDate = new DateTime('-365 days');
// need -12 months and period before that
$startDate = new DateTime('-2 years');
} else {
// If the start date is custom, we need to include an equal amount beforehand
// to show the data for the previous period.
$startDate = (new Carbon($startDate))->subtract($diff)->toDateTime();
}
if (! isset($endDate)) {

View File

@@ -73,12 +73,15 @@ class CanRequestCustomTimedStatisticsTest extends TestCase
'users' => [
$timeStart->copy()->getTimestamp() => 1,
$timeStart->copy()->subDays(1)->getTimestamp() => 1,
$timeStart->copy()->subDays(2)->getTimestamp() => 1,
], 'discussions' => [
$timeStart->copy()->getTimestamp() => 1,
$timeStart->copy()->subDays(1)->getTimestamp() => 2,
$timeStart->copy()->subDays(2)->getTimestamp() => 1,
], 'posts' => [
$timeStart->copy()->getTimestamp() => 2,
$timeStart->copy()->subDays(1)->getTimestamp() => 2,
$timeStart->copy()->subDays(2)->getTimestamp() => 1,
]
];