Differential D12661 Diff 30413 src/applications/calendar/query/PhabricatorCalendarEventSearchEngine.php
Changeset View
Changeset View
Standalone View
Standalone View
src/applications/calendar/query/PhabricatorCalendarEventSearchEngine.php
<?php | <?php | ||||
final class PhabricatorCalendarEventSearchEngine | final class PhabricatorCalendarEventSearchEngine | ||||
extends PhabricatorApplicationSearchEngine { | extends PhabricatorApplicationSearchEngine { | ||||
private $calendarYear; | |||||
private $calendarMonth; | |||||
public function getResultTypeDescription() { | public function getResultTypeDescription() { | ||||
return pht('Calendar Events'); | return pht('Calendar Events'); | ||||
} | } | ||||
public function getApplicationClassName() { | public function getApplicationClassName() { | ||||
return 'PhabricatorCalendarApplication'; | return 'PhabricatorCalendarApplication'; | ||||
} | } | ||||
Show All 28 Lines | $saved->setParameter( | ||||
'display', | 'display', | ||||
$request->getStr('display')); | $request->getStr('display')); | ||||
return $saved; | return $saved; | ||||
} | } | ||||
public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { | public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { | ||||
$query = id(new PhabricatorCalendarEventQuery()); | $query = id(new PhabricatorCalendarEventQuery()); | ||||
$viewer = $this->requireViewer(); | |||||
$min_range = null; | $min_range = null; | ||||
$max_range = null; | $max_range = null; | ||||
if ($saved->getParameter('rangeStart')) { | if ($saved->getParameter('rangeStart')) { | ||||
$min_range = $saved->getParameter('rangeStart'); | $min_range = $saved->getParameter('rangeStart'); | ||||
} | } | ||||
if ($saved->getParameter('rangeEnd')) { | if ($saved->getParameter('rangeEnd')) { | ||||
$max_range = $saved->getParameter('rangeEnd'); | $max_range = $saved->getParameter('rangeEnd'); | ||||
} | } | ||||
if ($saved->getParameter('display') == 'month') { | |||||
list($start_month, $start_year) = $this->getDisplayMonthAndYear($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; | |||||
$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 (!$max_range || ($max_range > $calendar_end)) { | |||||
$max_range = $calendar_end; | |||||
} | |||||
} | |||||
if ($saved->getParameter('upcoming')) { | if ($saved->getParameter('upcoming')) { | ||||
if ($min_range) { | if ($min_range) { | ||||
$min_range = max(time(), $min_range); | $min_range = max(time(), $min_range); | ||||
} else { | } else { | ||||
$min_range = time(); | $min_range = time(); | ||||
} | } | ||||
} | } | ||||
▲ Show 20 Lines • Show All 103 Lines • ▼ Show 20 Lines | $names = array( | ||||
'month' => pht('Month View'), | 'month' => pht('Month View'), | ||||
'upcoming' => pht('Upcoming Events'), | 'upcoming' => pht('Upcoming Events'), | ||||
'all' => pht('All Events'), | 'all' => pht('All Events'), | ||||
); | ); | ||||
return $names; | return $names; | ||||
} | } | ||||
public function setCalendarYearAndMonth($year, $month) { | |||||
$this->calendarYear = $year; | |||||
$this->calendarMonth = $month; | |||||
return $this; | |||||
} | |||||
public function buildSavedQueryFromBuiltin($query_key) { | public function buildSavedQueryFromBuiltin($query_key) { | ||||
$query = $this->newSavedQuery(); | $query = $this->newSavedQuery(); | ||||
$query->setQueryKey($query_key); | $query->setQueryKey($query_key); | ||||
switch ($query_key) { | switch ($query_key) { | ||||
case 'month': | case 'month': | ||||
return $query->setParameter('display', 'month'); | return $query->setParameter('display', 'month'); | ||||
case 'upcoming': | case 'upcoming': | ||||
▲ Show 20 Lines • Show All 58 Lines • ▼ Show 20 Lines | final class PhabricatorCalendarEventSearchEngine | ||||
private function buildCalendarView( | private function buildCalendarView( | ||||
array $statuses, | array $statuses, | ||||
PhabricatorSavedQuery $query, | PhabricatorSavedQuery $query, | ||||
array $handles) { | array $handles) { | ||||
$viewer = $this->requireViewer(); | $viewer = $this->requireViewer(); | ||||
$now = time(); | $now = time(); | ||||
$epoch = $query->getParameter('rangeStart'); | list($start_month, $start_year) = $this->getDisplayMonthAndYear($query); | ||||
if (!$epoch) { | |||||
$epoch = $query->getParameter('rangeEnd'); | |||||
if (!$epoch) { | |||||
$epoch = time(); | |||||
} | |||||
} | |||||
$year = phabricator_format_local_time($epoch, $viewer, 'Y'); | |||||
$month = phabricator_format_local_time($epoch, $viewer, 'm'); | |||||
$now_year = phabricator_format_local_time($now, $viewer, 'Y'); | $now_year = phabricator_format_local_time($now, $viewer, 'Y'); | ||||
$now_month = phabricator_format_local_time($now, $viewer, 'm'); | $now_month = phabricator_format_local_time($now, $viewer, 'm'); | ||||
$now_day = phabricator_format_local_time($now, $viewer, 'j'); | $now_day = phabricator_format_local_time($now, $viewer, 'j'); | ||||
if ($month == $now_month && $year == $now_year) { | if ($start_month == $now_month && $start_year == $now_year) { | ||||
$month_view = new PHUICalendarMonthView($month, $year, $now_day); | $month_view = new PHUICalendarMonthView( | ||||
$start_month, | |||||
$start_year, | |||||
$now_day); | |||||
} else { | } else { | ||||
$month_view = new PHUICalendarMonthView($month, $year); | $month_view = new PHUICalendarMonthView( | ||||
$start_month, | |||||
$start_year); | |||||
} | } | ||||
$month_view->setUser($viewer); | $month_view->setUser($viewer); | ||||
$phids = mpull($statuses, 'getUserPHID'); | $phids = mpull($statuses, 'getUserPHID'); | ||||
/* Assign Colors */ | /* Assign Colors */ | ||||
$unique = array_unique($phids); | $unique = array_unique($phids); | ||||
Show All 22 Lines | foreach ($statuses as $status) { | ||||
$event->setUserPHID($status->getUserPHID()); | $event->setUserPHID($status->getUserPHID()); | ||||
$event->setDescription(pht('%s (%s)', $name_text, $status_text)); | $event->setDescription(pht('%s (%s)', $name_text, $status_text)); | ||||
$event->setName($status_text); | $event->setName($status_text); | ||||
$event->setEventID($status->getID()); | $event->setEventID($status->getID()); | ||||
$event->setColor($eventcolor[$status->getUserPHID()]); | $event->setColor($eventcolor[$status->getUserPHID()]); | ||||
$month_view->addEvent($event); | $month_view->addEvent($event); | ||||
} | } | ||||
$month_view->setBrowseURI( | |||||
$this->getURI('query/'.$query->getQueryKey().'/')); | |||||
return $month_view; | return $month_view; | ||||
} | |||||
private function getDisplayMonthAndYear( | |||||
PhabricatorSavedQuery $query) { | |||||
$viewer = $this->requireViewer(); | |||||
// get month/year from url | |||||
if ($this->calendarYear && $this->calendarMonth) { | |||||
$start_year = $this->calendarYear; | |||||
$start_month = $this->calendarMonth; | |||||
} else { | |||||
$epoch = $query->getParameter('rangeStart'); | |||||
if (!$epoch) { | |||||
$epoch = $query->getParameter('rangeEnd'); | |||||
if (!$epoch) { | |||||
$epoch = time(); | |||||
} | |||||
} | |||||
$start_year = phabricator_format_local_time($epoch, $viewer, 'Y'); | |||||
$start_month = phabricator_format_local_time($epoch, $viewer, 'm'); | |||||
} | |||||
return array($start_month, $start_year); | |||||
} | |||||
public function getPageSize(PhabricatorSavedQuery $saved) { | |||||
return $saved->getParameter('limit', 1000); | |||||
} | } | ||||
} | } |