2014-02-06 19:10:18 +01:00
|
|
|
<?php
|
|
|
|
|
|
|
|
final class PhabricatorCalendarEventSearchEngine
|
|
|
|
extends PhabricatorApplicationSearchEngine {
|
|
|
|
|
2014-06-12 22:22:20 +02:00
|
|
|
public function getResultTypeDescription() {
|
|
|
|
return pht('Calendar Events');
|
|
|
|
}
|
|
|
|
|
2015-02-05 00:47:48 +01:00
|
|
|
public function getApplicationClassName() {
|
2014-07-23 02:03:09 +02:00
|
|
|
return 'PhabricatorCalendarApplication';
|
2014-05-08 18:18:02 +02:00
|
|
|
}
|
|
|
|
|
2014-02-06 19:10:18 +01:00
|
|
|
public function buildSavedQueryFromRequest(AphrontRequest $request) {
|
|
|
|
$saved = new PhabricatorSavedQuery();
|
|
|
|
|
|
|
|
$saved->setParameter(
|
|
|
|
'rangeStart',
|
|
|
|
$this->readDateFromRequest($request, 'rangeStart'));
|
|
|
|
|
|
|
|
$saved->setParameter(
|
|
|
|
'rangeEnd',
|
|
|
|
$this->readDateFromRequest($request, 'rangeEnd'));
|
|
|
|
|
|
|
|
$saved->setParameter(
|
|
|
|
'upcoming',
|
|
|
|
$this->readBoolFromRequest($request, 'upcoming'));
|
|
|
|
|
|
|
|
$saved->setParameter(
|
|
|
|
'invitedPHIDs',
|
|
|
|
$this->readUsersFromRequest($request, 'invited'));
|
|
|
|
|
|
|
|
$saved->setParameter(
|
|
|
|
'creatorPHIDs',
|
|
|
|
$this->readUsersFromRequest($request, 'creators'));
|
|
|
|
|
Canceling calendar events should deactivate the event
Summary: Closes T7943, Canceling calendar event should deactivate the event instead of destroying data.
Test Plan: Create an event, cancel it, see changed status icon, query for active events, event should not appear, query for deactivated events, event should appear in results.
Reviewers: #blessed_reviewers, epriestley
Reviewed By: #blessed_reviewers, epriestley
Subscribers: Korvin, epriestley
Maniphest Tasks: T7943
Differential Revision: https://secure.phabricator.com/D12604
2015-04-29 17:39:39 +02:00
|
|
|
$saved->setParameter(
|
|
|
|
'isCancelled',
|
|
|
|
$request->getStr('isCancelled'));
|
|
|
|
|
2014-02-06 19:10:18 +01:00
|
|
|
return $saved;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) {
|
|
|
|
$query = id(new PhabricatorCalendarEventQuery());
|
|
|
|
|
|
|
|
$min_range = null;
|
|
|
|
$max_range = null;
|
|
|
|
|
|
|
|
if ($saved->getParameter('rangeStart')) {
|
|
|
|
$min_range = $saved->getParameter('rangeStart');
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($saved->getParameter('rangeEnd')) {
|
|
|
|
$max_range = $saved->getParameter('rangeEnd');
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($saved->getParameter('upcoming')) {
|
|
|
|
if ($min_range) {
|
|
|
|
$min_range = max(time(), $min_range);
|
|
|
|
} else {
|
|
|
|
$min_range = time();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($min_range || $max_range) {
|
|
|
|
$query->withDateRange($min_range, $max_range);
|
|
|
|
}
|
|
|
|
|
|
|
|
$invited_phids = $saved->getParameter('invitedPHIDs');
|
|
|
|
if ($invited_phids) {
|
|
|
|
$query->withInvitedPHIDs($invited_phids);
|
|
|
|
}
|
|
|
|
|
|
|
|
$creator_phids = $saved->getParameter('creatorPHIDs');
|
|
|
|
if ($creator_phids) {
|
|
|
|
$query->withCreatorPHIDs($creator_phids);
|
|
|
|
}
|
|
|
|
|
Canceling calendar events should deactivate the event
Summary: Closes T7943, Canceling calendar event should deactivate the event instead of destroying data.
Test Plan: Create an event, cancel it, see changed status icon, query for active events, event should not appear, query for deactivated events, event should appear in results.
Reviewers: #blessed_reviewers, epriestley
Reviewed By: #blessed_reviewers, epriestley
Subscribers: Korvin, epriestley
Maniphest Tasks: T7943
Differential Revision: https://secure.phabricator.com/D12604
2015-04-29 17:39:39 +02:00
|
|
|
$is_cancelled = $saved->getParameter('isCancelled');
|
|
|
|
switch ($is_cancelled) {
|
|
|
|
case 'active':
|
|
|
|
$query->withIsCancelled(false);
|
|
|
|
break;
|
|
|
|
case 'cancelled':
|
|
|
|
$query->withIsCancelled(true);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2014-02-06 19:10:18 +01:00
|
|
|
return $query;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function buildSearchForm(
|
|
|
|
AphrontFormView $form,
|
|
|
|
PhabricatorSavedQuery $saved) {
|
|
|
|
|
|
|
|
$range_start = $saved->getParameter('rangeStart');
|
|
|
|
$range_end = $saved->getParameter('rangeEnd');
|
|
|
|
$upcoming = $saved->getParameter('upcoming');
|
Canceling calendar events should deactivate the event
Summary: Closes T7943, Canceling calendar event should deactivate the event instead of destroying data.
Test Plan: Create an event, cancel it, see changed status icon, query for active events, event should not appear, query for deactivated events, event should appear in results.
Reviewers: #blessed_reviewers, epriestley
Reviewed By: #blessed_reviewers, epriestley
Subscribers: Korvin, epriestley
Maniphest Tasks: T7943
Differential Revision: https://secure.phabricator.com/D12604
2015-04-29 17:39:39 +02:00
|
|
|
$is_cancelled = $saved->getParameter('isCancelled', 'active');
|
2014-02-06 19:10:18 +01:00
|
|
|
|
|
|
|
$invited_phids = $saved->getParameter('invitedPHIDs', array());
|
|
|
|
$creator_phids = $saved->getParameter('creatorPHIDs', array());
|
Canceling calendar events should deactivate the event
Summary: Closes T7943, Canceling calendar event should deactivate the event instead of destroying data.
Test Plan: Create an event, cancel it, see changed status icon, query for active events, event should not appear, query for deactivated events, event should appear in results.
Reviewers: #blessed_reviewers, epriestley
Reviewed By: #blessed_reviewers, epriestley
Subscribers: Korvin, epriestley
Maniphest Tasks: T7943
Differential Revision: https://secure.phabricator.com/D12604
2015-04-29 17:39:39 +02:00
|
|
|
$resolution_types = array(
|
|
|
|
'active' => pht('Active Events Only'),
|
|
|
|
'cancelled' => pht('Cancelled Events Only'),
|
|
|
|
'both' => pht('Both Cancelled and Active Events'),
|
|
|
|
);
|
2014-02-06 19:10:18 +01:00
|
|
|
|
|
|
|
$form
|
2015-03-31 23:10:32 +02:00
|
|
|
->appendControl(
|
2014-02-06 19:10:18 +01:00
|
|
|
id(new AphrontFormTokenizerControl())
|
2014-07-18 00:44:18 +02:00
|
|
|
->setDatasource(new PhabricatorPeopleDatasource())
|
2014-02-06 19:10:18 +01:00
|
|
|
->setName('creators')
|
|
|
|
->setLabel(pht('Created By'))
|
2015-03-31 23:10:32 +02:00
|
|
|
->setValue($creator_phids))
|
|
|
|
->appendControl(
|
2014-02-06 19:10:18 +01:00
|
|
|
id(new AphrontFormTokenizerControl())
|
2014-07-18 00:44:18 +02:00
|
|
|
->setDatasource(new PhabricatorPeopleDatasource())
|
2014-02-06 19:10:18 +01:00
|
|
|
->setName('invited')
|
|
|
|
->setLabel(pht('Invited'))
|
2015-03-31 23:10:32 +02:00
|
|
|
->setValue($invited_phids))
|
2014-02-06 19:10:18 +01:00
|
|
|
->appendChild(
|
|
|
|
id(new AphrontFormDateControl())
|
|
|
|
->setLabel(pht('Occurs After'))
|
|
|
|
->setUser($this->requireViewer())
|
|
|
|
->setName('rangeStart')
|
|
|
|
->setAllowNull(true)
|
|
|
|
->setValue($range_start))
|
|
|
|
->appendChild(
|
|
|
|
id(new AphrontFormDateControl())
|
|
|
|
->setLabel(pht('Occurs Before'))
|
|
|
|
->setUser($this->requireViewer())
|
|
|
|
->setName('rangeEnd')
|
|
|
|
->setAllowNull(true)
|
|
|
|
->setValue($range_end))
|
|
|
|
->appendChild(
|
|
|
|
id(new AphrontFormCheckboxControl())
|
|
|
|
->addCheckbox(
|
|
|
|
'upcoming',
|
|
|
|
1,
|
|
|
|
pht('Show only upcoming events.'),
|
Canceling calendar events should deactivate the event
Summary: Closes T7943, Canceling calendar event should deactivate the event instead of destroying data.
Test Plan: Create an event, cancel it, see changed status icon, query for active events, event should not appear, query for deactivated events, event should appear in results.
Reviewers: #blessed_reviewers, epriestley
Reviewed By: #blessed_reviewers, epriestley
Subscribers: Korvin, epriestley
Maniphest Tasks: T7943
Differential Revision: https://secure.phabricator.com/D12604
2015-04-29 17:39:39 +02:00
|
|
|
$upcoming))
|
|
|
|
->appendChild(
|
|
|
|
id(new AphrontFormSelectControl())
|
|
|
|
->setLabel(pht('Cancelled Events'))
|
|
|
|
->setName('isCancelled')
|
|
|
|
->setValue($is_cancelled)
|
|
|
|
->setOptions($resolution_types));
|
2014-02-06 19:10:18 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
protected function getURI($path) {
|
|
|
|
return '/calendar/event/'.$path;
|
|
|
|
}
|
|
|
|
|
2015-01-06 21:34:51 +01:00
|
|
|
protected function getBuiltinQueryNames() {
|
2014-02-06 19:10:18 +01:00
|
|
|
$names = array(
|
|
|
|
'upcoming' => pht('Upcoming Events'),
|
2014-07-23 02:03:09 +02:00
|
|
|
'all' => pht('All Events'),
|
2014-02-06 19:10:18 +01:00
|
|
|
);
|
|
|
|
|
|
|
|
return $names;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function buildSavedQueryFromBuiltin($query_key) {
|
|
|
|
$query = $this->newSavedQuery();
|
|
|
|
$query->setQueryKey($query_key);
|
|
|
|
|
|
|
|
switch ($query_key) {
|
|
|
|
case 'upcoming':
|
|
|
|
return $query->setParameter('upcoming', true);
|
|
|
|
case 'all':
|
|
|
|
return $query;
|
|
|
|
}
|
|
|
|
|
|
|
|
return parent::buildSavedQueryFromBuiltin($query_key);
|
|
|
|
}
|
|
|
|
|
2014-08-07 00:04:12 +02:00
|
|
|
protected function getRequiredHandlePHIDsForResultList(
|
|
|
|
array $objects,
|
|
|
|
PhabricatorSavedQuery $query) {
|
|
|
|
$phids = array();
|
|
|
|
foreach ($objects as $event) {
|
|
|
|
$phids[$event->getUserPHID()] = 1;
|
|
|
|
}
|
|
|
|
return array_keys($phids);
|
|
|
|
}
|
|
|
|
|
2014-05-08 18:18:02 +02:00
|
|
|
protected function renderResultList(
|
|
|
|
array $events,
|
|
|
|
PhabricatorSavedQuery $query,
|
|
|
|
array $handles) {
|
|
|
|
assert_instances_of($events, 'PhabricatorCalendarEvent');
|
|
|
|
$viewer = $this->requireViewer();
|
|
|
|
$list = new PHUIObjectItemListView();
|
|
|
|
foreach ($events as $event) {
|
2015-04-30 22:22:13 +02:00
|
|
|
$href = '/E'.$event->getID();
|
2014-05-08 18:18:02 +02:00
|
|
|
$from = phabricator_datetime($event->getDateFrom(), $viewer);
|
|
|
|
$to = phabricator_datetime($event->getDateTo(), $viewer);
|
2014-08-07 00:04:12 +02:00
|
|
|
$creator_handle = $handles[$event->getUserPHID()];
|
2014-05-08 18:18:02 +02:00
|
|
|
|
2015-04-30 22:22:13 +02:00
|
|
|
$name = (strlen($event->getName())) ?
|
|
|
|
$event->getName() : $event->getTerseSummary($viewer);
|
|
|
|
|
2014-05-08 18:18:02 +02:00
|
|
|
$color = ($event->getStatus() == PhabricatorCalendarEvent::STATUS_AWAY)
|
|
|
|
? 'red'
|
|
|
|
: 'yellow';
|
|
|
|
|
|
|
|
$item = id(new PHUIObjectItemView())
|
2015-04-30 22:22:13 +02:00
|
|
|
->setHeader($name)
|
2014-05-08 18:18:02 +02:00
|
|
|
->setHref($href)
|
|
|
|
->setBarColor($color)
|
2014-08-07 00:04:12 +02:00
|
|
|
->addByline(pht('Creator: %s', $creator_handle->renderLink()))
|
2014-05-08 18:18:02 +02:00
|
|
|
->addAttribute(pht('From %s to %s', $from, $to))
|
2014-08-30 00:15:13 +02:00
|
|
|
->addAttribute(id(new PhutilUTF8StringTruncator())
|
|
|
|
->setMaximumGlyphs(64)
|
|
|
|
->truncateString($event->getDescription()));
|
2014-05-08 18:18:02 +02:00
|
|
|
|
|
|
|
$list->addItem($item);
|
|
|
|
}
|
|
|
|
|
|
|
|
return $list;
|
|
|
|
}
|
|
|
|
|
2014-02-06 19:10:18 +01:00
|
|
|
}
|