Differential D12659 Diff 30411 src/applications/calendar/query/PhabricatorCalendarEventSearchEngine.php
Changeset View
Changeset View
Standalone View
Standalone View
src/applications/calendar/query/PhabricatorCalendarEventSearchEngine.php
Show All 32 Lines | public function buildSavedQueryFromRequest(AphrontRequest $request) { | ||||
$saved->setParameter( | $saved->setParameter( | ||||
'creatorPHIDs', | 'creatorPHIDs', | ||||
$this->readUsersFromRequest($request, 'creators')); | $this->readUsersFromRequest($request, 'creators')); | ||||
$saved->setParameter( | $saved->setParameter( | ||||
'isCancelled', | 'isCancelled', | ||||
$request->getStr('isCancelled')); | $request->getStr('isCancelled')); | ||||
$saved->setParameter( | |||||
'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()); | ||||
$min_range = null; | $min_range = null; | ||||
$max_range = null; | $max_range = null; | ||||
▲ Show 20 Lines • Show All 44 Lines • ▼ Show 20 Lines | final class PhabricatorCalendarEventSearchEngine | ||||
public function buildSearchForm( | public function buildSearchForm( | ||||
AphrontFormView $form, | AphrontFormView $form, | ||||
PhabricatorSavedQuery $saved) { | PhabricatorSavedQuery $saved) { | ||||
$range_start = $saved->getParameter('rangeStart'); | $range_start = $saved->getParameter('rangeStart'); | ||||
$range_end = $saved->getParameter('rangeEnd'); | $range_end = $saved->getParameter('rangeEnd'); | ||||
$upcoming = $saved->getParameter('upcoming'); | $upcoming = $saved->getParameter('upcoming'); | ||||
$is_cancelled = $saved->getParameter('isCancelled', 'active'); | $is_cancelled = $saved->getParameter('isCancelled', 'active'); | ||||
$display = $saved->getParameter('display', 'month'); | |||||
$invited_phids = $saved->getParameter('invitedPHIDs', array()); | $invited_phids = $saved->getParameter('invitedPHIDs', array()); | ||||
$creator_phids = $saved->getParameter('creatorPHIDs', array()); | $creator_phids = $saved->getParameter('creatorPHIDs', array()); | ||||
$resolution_types = array( | $resolution_types = array( | ||||
'active' => pht('Active Events Only'), | 'active' => pht('Active Events Only'), | ||||
'cancelled' => pht('Cancelled Events Only'), | 'cancelled' => pht('Cancelled Events Only'), | ||||
'both' => pht('Both Cancelled and Active Events'), | 'both' => pht('Both Cancelled and Active Events'), | ||||
); | ); | ||||
$display_options = array( | |||||
'month' => pht('Month View'), | |||||
'list' => pht('List View'), | |||||
); | |||||
$form | $form | ||||
->appendControl( | ->appendControl( | ||||
id(new AphrontFormTokenizerControl()) | id(new AphrontFormTokenizerControl()) | ||||
->setDatasource(new PhabricatorPeopleDatasource()) | ->setDatasource(new PhabricatorPeopleDatasource()) | ||||
->setName('creators') | ->setName('creators') | ||||
->setLabel(pht('Created By')) | ->setLabel(pht('Created By')) | ||||
->setValue($creator_phids)) | ->setValue($creator_phids)) | ||||
Show All 24 Lines | $form | ||||
1, | 1, | ||||
pht('Show only upcoming events.'), | pht('Show only upcoming events.'), | ||||
$upcoming)) | $upcoming)) | ||||
->appendChild( | ->appendChild( | ||||
id(new AphrontFormSelectControl()) | id(new AphrontFormSelectControl()) | ||||
->setLabel(pht('Cancelled Events')) | ->setLabel(pht('Cancelled Events')) | ||||
->setName('isCancelled') | ->setName('isCancelled') | ||||
->setValue($is_cancelled) | ->setValue($is_cancelled) | ||||
->setOptions($resolution_types)); | ->setOptions($resolution_types)) | ||||
->appendChild( | |||||
id(new AphrontFormSelectControl()) | |||||
->setLabel(pht('Display Options')) | |||||
->setName('display') | |||||
->setValue($display) | |||||
->setOptions($display_options)); | |||||
} | } | ||||
protected function getURI($path) { | protected function getURI($path) { | ||||
return '/calendar/event/'.$path; | return '/calendar/'.$path; | ||||
} | } | ||||
protected function getBuiltinQueryNames() { | protected function getBuiltinQueryNames() { | ||||
$names = array( | $names = array( | ||||
'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 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': | |||||
return $query->setParameter('display', 'month'); | |||||
case 'upcoming': | case 'upcoming': | ||||
return $query->setParameter('upcoming', true); | return $query->setParameter('upcoming', true); | ||||
case 'all': | case 'all': | ||||
return $query; | return $query; | ||||
} | } | ||||
return parent::buildSavedQueryFromBuiltin($query_key); | return parent::buildSavedQueryFromBuiltin($query_key); | ||||
} | } | ||||
protected function getRequiredHandlePHIDsForResultList( | protected function getRequiredHandlePHIDsForResultList( | ||||
array $objects, | array $objects, | ||||
PhabricatorSavedQuery $query) { | PhabricatorSavedQuery $query) { | ||||
$phids = array(); | $phids = array(); | ||||
foreach ($objects as $event) { | foreach ($objects as $event) { | ||||
$phids[$event->getUserPHID()] = 1; | $phids[$event->getUserPHID()] = 1; | ||||
} | } | ||||
return array_keys($phids); | return array_keys($phids); | ||||
} | } | ||||
protected function renderResultList( | protected function renderResultList( | ||||
array $events, | array $events, | ||||
PhabricatorSavedQuery $query, | PhabricatorSavedQuery $query, | ||||
array $handles) { | array $handles) { | ||||
if ($query->getParameter('display') == 'month') { | |||||
return $this->buildCalendarView($events, $query, $handles); | |||||
} | |||||
assert_instances_of($events, 'PhabricatorCalendarEvent'); | assert_instances_of($events, 'PhabricatorCalendarEvent'); | ||||
$viewer = $this->requireViewer(); | $viewer = $this->requireViewer(); | ||||
$list = new PHUIObjectItemListView(); | $list = new PHUIObjectItemListView(); | ||||
foreach ($events as $event) { | foreach ($events as $event) { | ||||
$href = '/E'.$event->getID(); | $href = '/E'.$event->getID(); | ||||
$from = phabricator_datetime($event->getDateFrom(), $viewer); | $from = phabricator_datetime($event->getDateFrom(), $viewer); | ||||
$to = phabricator_datetime($event->getDateTo(), $viewer); | $to = phabricator_datetime($event->getDateTo(), $viewer); | ||||
$creator_handle = $handles[$event->getUserPHID()]; | $creator_handle = $handles[$event->getUserPHID()]; | ||||
Show All 16 Lines | foreach ($events as $event) { | ||||
->truncateString($event->getDescription())); | ->truncateString($event->getDescription())); | ||||
$list->addItem($item); | $list->addItem($item); | ||||
} | } | ||||
return $list; | return $list; | ||||
} | } | ||||
private function buildCalendarView( | |||||
array $statuses, | |||||
PhabricatorSavedQuery $query, | |||||
array $handles) { | |||||
$viewer = $this->requireViewer(); | |||||
$now = time(); | |||||
$epoch = $query->getParameter('rangeStart'); | |||||
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_month = phabricator_format_local_time($now, $viewer, 'm'); | |||||
$now_day = phabricator_format_local_time($now, $viewer, 'j'); | |||||
if ($month == $now_month && $year == $now_year) { | |||||
$month_view = new PHUICalendarMonthView($month, $year, $now_day); | |||||
} else { | |||||
$month_view = new PHUICalendarMonthView($month, $year); | |||||
} | |||||
$month_view->setUser($viewer); | |||||
$phids = mpull($statuses, 'getUserPHID'); | |||||
/* Assign Colors */ | |||||
$unique = array_unique($phids); | |||||
$allblue = false; | |||||
$calcolors = CalendarColors::getColors(); | |||||
if (count($unique) > count($calcolors)) { | |||||
$allblue = true; | |||||
} | |||||
$i = 0; | |||||
$eventcolor = array(); | |||||
foreach ($unique as $phid) { | |||||
if ($allblue) { | |||||
$eventcolor[$phid] = CalendarColors::COLOR_SKY; | |||||
} else { | |||||
$eventcolor[$phid] = $calcolors[$i]; | |||||
} | |||||
$i++; | |||||
} | |||||
foreach ($statuses as $status) { | |||||
$event = new AphrontCalendarEventView(); | |||||
$event->setEpochRange($status->getDateFrom(), $status->getDateTo()); | |||||
$name_text = $handles[$status->getUserPHID()]->getName(); | |||||
$status_text = $status->getHumanStatus(); | |||||
$event->setUserPHID($status->getUserPHID()); | |||||
$event->setDescription(pht('%s (%s)', $name_text, $status_text)); | |||||
$event->setName($status_text); | |||||
$event->setEventID($status->getID()); | |||||
$event->setColor($eventcolor[$status->getUserPHID()]); | |||||
$month_view->addEvent($event); | |||||
} | |||||
return $month_view; | |||||
} | |||||
} | } |