diff --git a/src/applications/calendar/query/PhabricatorCalendarEventQuery.php b/src/applications/calendar/query/PhabricatorCalendarEventQuery.php --- a/src/applications/calendar/query/PhabricatorCalendarEventQuery.php +++ b/src/applications/calendar/query/PhabricatorCalendarEventQuery.php @@ -112,6 +112,7 @@ $map = array(); $instance_sequence_pairs = array(); + $enforced_end = null; foreach ($events as $key => $event) { $sequence_start = 0; @@ -159,6 +160,8 @@ $end = $event->getRecurrenceEndDate(); } else if ($this->rangeEnd) { $end = $this->rangeEnd; + } else { + $end = $enforced_end; } if ($end) { @@ -172,15 +175,26 @@ $sequence_end = $this->getRawResultLimit() + $sequence_start; } + $date_to = $end; + $sequence_start = max(1, $sequence_start); for ($index = $sequence_start; $index < $sequence_end; $index++) { - $instance_sequence_pairs[] = array($event->getPHID(), $index); $events[] = $event->generateNthGhost($index, $viewer); - $last_key = last_key($events); - $map[$event->getPHID()][$index] = $last_key; + $date_to = $events[$last_key]->getDateTo(); } + $enforced_end = $date_to; + $events = msort($events, 'getDateFrom'); + $events = array_slice($events, 0, 1000, true); + } + } + + foreach ($events as $key => $event) { + if ($event->getIsGhostEvent()) { + $index = $event->getSequenceIndex(); + $instance_sequence_pairs[] = array($event->getPHID(), $index); + $map[$event->getPHID()][$index] = $key; } } @@ -213,6 +227,15 @@ return $events; } + private function mergeAndTrim($first_list, $second_list, $size) { + foreach ($second_list as $item) { + $first_list[] = $item; + } + $events = msort($first_list, 'getPHID'); + $events->setSize((int)$size); + return $events; + } + protected function buildJoinClauseParts(AphrontDatabaseConnection $conn_r) { $parts = parent::buildJoinClauseParts($conn_r); if ($this->inviteePHIDs !== null) { diff --git a/src/applications/calendar/query/PhabricatorCalendarEventSearchEngine.php b/src/applications/calendar/query/PhabricatorCalendarEventSearchEngine.php --- a/src/applications/calendar/query/PhabricatorCalendarEventSearchEngine.php +++ b/src/applications/calendar/query/PhabricatorCalendarEventSearchEngine.php @@ -462,6 +462,7 @@ } public function getPageSize(PhabricatorSavedQuery $saved) { + return $saved->getParameter('limit', 1000); if ($this->isMonthView($saved) || $this->isDayView($saved)) { return $saved->getParameter('limit', 1000); } else {