From 88ef32f61cb95e5dffd8e2c3622ca9d030cf9597 Mon Sep 17 00:00:00 2001 From: lkassianik Date: Tue, 5 May 2015 16:04:00 -0700 Subject: [PATCH] Restricting query to return the displayed range Summary: Ref T4393, Refactoring calendar query logic to only return at most what the query dates have specified Test Plan: Query Calendar events for range May 1 - indefinite in month view, see events, scroll back to April, events should be absent, because April is out of range. Reviewers: #blessed_reviewers, epriestley Reviewed By: #blessed_reviewers, epriestley Subscribers: Korvin, epriestley Maniphest Tasks: T4393 Differential Revision: https://secure.phabricator.com/D12728 --- .../PhabricatorCalendarEventSearchEngine.php | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/src/applications/calendar/query/PhabricatorCalendarEventSearchEngine.php b/src/applications/calendar/query/PhabricatorCalendarEventSearchEngine.php index 05b1d95f51..3f14adbae8 100644 --- a/src/applications/calendar/query/PhabricatorCalendarEventSearchEngine.php +++ b/src/applications/calendar/query/PhabricatorCalendarEventSearchEngine.php @@ -52,35 +52,35 @@ final class PhabricatorCalendarEventSearchEngine public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { $query = id(new PhabricatorCalendarEventQuery()); $viewer = $this->requireViewer(); + $timezone = new DateTimeZone($viewer->getTimezoneIdentifier()); $min_range = $this->getDateFrom($saved)->getEpoch(); $max_range = $this->getDateTo($saved)->getEpoch(); - if ($saved->getParameter('display') == 'month') { - list($start_year, $start_month) = + if ($saved->getParameter('display') == 'month' || + $saved->getParameter('display') == 'day') { + list($start_year, $start_month, $start_day) = $this->getDisplayYearAndMonthAndDay($saved); - $start_day = 1; - $end_year = ($start_month == 12) ? $start_year + 1 : $start_year; - $end_month = ($start_month == 12) ? 1 : $start_month + 1; - $end_day = 1; + $start_day = new DateTime( + "{$start_year}-{$start_month}-{$start_day}", + $timezone); + $next = clone $start_day; - $calendar_start = AphrontFormDateControlValue::newFromParts( - $viewer, - $start_year, - $start_month, - $start_day)->getEpoch(); - $calendar_end = AphrontFormDateControlValue::newFromParts( - $viewer, - $end_year, - $end_month, - $end_day)->getEpoch(); - - if (!$min_range || ($min_range < $calendar_start)) { - $min_range = $calendar_start; + if ($saved->getParameter('display') == 'month') { + $next->modify('+1 month'); + } else if ($saved->getParameter('display') == 'day') { + $next->modify('+1 day'); } - if (!$max_range || ($max_range > $calendar_end)) { - $max_range = $calendar_end; + + $display_start = $start_day->format('U'); + $display_end = $next->format('U'); + + if (!$min_range || ($min_range < $display_start)) { + $min_range = $display_start; + } + if (!$max_range || ($max_range > $display_end)) { + $max_range = $display_end; } }