From 02c000530ccbc3829c6ca07ce104a9c2a0ce003a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20GAULIN?= Date: Sat, 14 May 2016 04:07:38 +0200 Subject: [PATCH] Display dates with backend timezone. Manipulate date with app timezone. --- modules/backend/widgets/Filter.php | 43 ++++++++++++--- .../widgets/filter/partials/_scope_date.htm | 6 +- .../filter/partials/_scope_daterange.htm | 6 +- modules/system/assets/ui/js/filter.dates.js | 55 +++++++++++-------- 4 files changed, 72 insertions(+), 38 deletions(-) diff --git a/modules/backend/widgets/Filter.php b/modules/backend/widgets/Filter.php index 3f01ae2f3..e108caf90 100644 --- a/modules/backend/widgets/Filter.php +++ b/modules/backend/widgets/Filter.php @@ -1,5 +1,6 @@ $scope]; + $loadDatePicker = false; + switch ($scope->type) { case 'date': + $loadDatePicker = true; + + if ($scope->value && $scope->value instanceof Carbon) { + $params['dateStr'] = Backend::dateTime($scope->value, ['formatAlias' => 'dateMin']); + $params['date'] = $scope->value->format('Y-m-d H:i:s'); + } + + break; case 'daterange': - // Load datepicker assets - new DatePicker($this->controller, new FormField('dummy', 'dummy')); + $loadDatePicker = true; + + if ($scope->value && is_array($scope->value) && count($scope->value) === 2 && + $scope->value[0] && $scope->value[0] instanceof Carbon && + $scope->value[1] && $scope->value[1] instanceof Carbon + ) { + $params['afterStr'] = Backend::dateTime($scope->value[0], ['formatAlias' => 'dateMin']); + $params['beforeStr'] = Backend::dateTime($scope->value[1], ['formatAlias' => 'dateMin']); + $params['after'] = $scope->value[0]->format('Y-m-d H:i:s'); + $params['before'] = $scope->value[1]->format('Y-m-d H:i:s'); + } + break; } - return $this->makePartial('scope_'.$scope->type, ['scope' => $scope]); + if($loadDatePicker) { + // Load datepicker assets + new DatePicker($this->controller, new FormField('dummy', 'dummy')); + } + + return $this->makePartial('scope_'.$scope->type, $params); } // @@ -501,7 +528,7 @@ class Filter extends WidgetBase switch ($scope->type) { case 'date': if ($scope->value instanceof Carbon) { - $value = $scope->value->setTime(0, 0, 0); + $value = $scope->value; /* * Condition @@ -510,7 +537,7 @@ class Filter extends WidgetBase $query->whereRaw(DbDongle::parse(strtr($scopeConditions, [ ':filtered' => $value->format('Y-m-d'), ':after' => $value->format('Y-m-d H:i:s'), - ':before' => $value->copy()->setTime(23, 59, 59)->format('Y-m-d H:i:s') + ':before' => $value->copy()->addDay()->addMinutes(-1)->format('Y-m-d H:i:s') ]))); } @@ -528,8 +555,6 @@ class Filter extends WidgetBase list($after, $before) = array_values($scope->value); if($after && $after instanceof Carbon && $before && $before instanceof Carbon) { - $after->setTime(0, 0, 0); - $before->setTime(23, 59, 59); /* * Condition @@ -728,8 +753,8 @@ class Filter extends WidgetBase } foreach ($ajaxDates as $date) { - if(preg_match('/\d{4}-\d{2}-\d{2}/', $date)) { - $dates[] = Carbon::createFromFormat('Y-m-d', $date); + if(preg_match('/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/', $date)) { + $dates[] = Carbon::createFromFormat('Y-m-d H:i:s', $date); } else { $dates = []; break; diff --git a/modules/backend/widgets/filter/partials/_scope_date.htm b/modules/backend/widgets/filter/partials/_scope_date.htm index 79ec5ffd4..6b3286d23 100644 --- a/modules/backend/widgets/filter/partials/_scope_date.htm +++ b/modules/backend/widgets/filter/partials/_scope_date.htm @@ -1,14 +1,14 @@ label)) ?>: - value && $scope->value instanceof \Carbon\Carbon ? $scope->value->format('Y-m-d') : e(trans('backend::lang.filter.date_all')) ?> + diff --git a/modules/backend/widgets/filter/partials/_scope_daterange.htm b/modules/backend/widgets/filter/partials/_scope_daterange.htm index 46e20d2ab..40d78fa63 100644 --- a/modules/backend/widgets/filter/partials/_scope_daterange.htm +++ b/modules/backend/widgets/filter/partials/_scope_daterange.htm @@ -1,14 +1,14 @@ label)) ?>: - value && is_array($scope->value) ? join(' → ', array_map(function($value) { return $value && $value instanceof \Carbon\Carbon ? $value->format('Y-m-d') : null; }, $scope->value)) : e(trans('backend::lang.filter.date_all')) ?> + diff --git a/modules/system/assets/ui/js/filter.dates.js b/modules/system/assets/ui/js/filter.dates.js index 2e02ca76a..073035388 100644 --- a/modules/system/assets/ui/js/filter.dates.js +++ b/modules/system/assets/ui/js/filter.dates.js @@ -165,7 +165,7 @@ \ \
\ - \