diff --git a/src/applications/almanac/query/AlmanacDeviceSearchEngine.php b/src/applications/almanac/query/AlmanacDeviceSearchEngine.php index b23d0ecb8c..8b487c5df8 100644 --- a/src/applications/almanac/query/AlmanacDeviceSearchEngine.php +++ b/src/applications/almanac/query/AlmanacDeviceSearchEngine.php @@ -1,84 +1,84 @@ pht('All Devices'), ); return $names; } public function buildSavedQueryFromBuiltin($query_key) { $query = $this->newSavedQuery(); $query->setQueryKey($query_key); switch ($query_key) { case 'all': return $query; } return parent::buildSavedQueryFromBuiltin($query_key); } protected function getRequiredHandlePHIDsForResultList( array $devices, PhabricatorSavedQuery $query) { return array(); } protected function renderResultList( array $devices, PhabricatorSavedQuery $query, array $handles) { assert_instances_of($devices, 'AlmanacDevice'); $viewer = $this->requireViewer(); $list = new PHUIObjectItemListView(); $list->setUser($viewer); foreach ($devices as $device) { $item = id(new PHUIObjectItemView()) ->setObjectName(pht('Device %d', $device->getID())) ->setHeader($device->getName()) ->setHref($device->getURI()) ->setObject($device); $list->addItem($item); } return $list; } } diff --git a/src/applications/almanac/query/AlmanacNetworkSearchEngine.php b/src/applications/almanac/query/AlmanacNetworkSearchEngine.php index 955d162096..e2b23d75b7 100644 --- a/src/applications/almanac/query/AlmanacNetworkSearchEngine.php +++ b/src/applications/almanac/query/AlmanacNetworkSearchEngine.php @@ -1,85 +1,85 @@ pht('All Networks'), ); return $names; } public function buildSavedQueryFromBuiltin($query_key) { $query = $this->newSavedQuery(); $query->setQueryKey($query_key); switch ($query_key) { case 'all': return $query; } return parent::buildSavedQueryFromBuiltin($query_key); } protected function getRequiredHandlePHIDsForResultList( array $networks, PhabricatorSavedQuery $query) { return array(); } protected function renderResultList( array $networks, PhabricatorSavedQuery $query, array $handles) { assert_instances_of($networks, 'AlmanacNetwork'); $viewer = $this->requireViewer(); $list = new PHUIObjectItemListView(); $list->setUser($viewer); foreach ($networks as $network) { $id = $network->getID(); $item = id(new PHUIObjectItemView()) ->setObjectName(pht('Network %d', $id)) ->setHeader($network->getName()) ->setHref($this->getApplicationURI("network/{$id}/")) ->setObject($network); $list->addItem($item); } return $list; } } diff --git a/src/applications/almanac/query/AlmanacServiceSearchEngine.php b/src/applications/almanac/query/AlmanacServiceSearchEngine.php index 08e6011ebb..e5a3c80560 100644 --- a/src/applications/almanac/query/AlmanacServiceSearchEngine.php +++ b/src/applications/almanac/query/AlmanacServiceSearchEngine.php @@ -1,95 +1,95 @@ pht('All Services'), ); return $names; } public function buildSavedQueryFromBuiltin($query_key) { $query = $this->newSavedQuery(); $query->setQueryKey($query_key); switch ($query_key) { case 'all': return $query; } return parent::buildSavedQueryFromBuiltin($query_key); } protected function getRequiredHandlePHIDsForResultList( array $services, PhabricatorSavedQuery $query) { return array(); } protected function renderResultList( array $services, PhabricatorSavedQuery $query, array $handles) { assert_instances_of($services, 'AlmanacService'); $viewer = $this->requireViewer(); $list = new PHUIObjectItemListView(); $list->setUser($viewer); foreach ($services as $service) { $item = id(new PHUIObjectItemView()) ->setObjectName(pht('Service %d', $service->getID())) ->setHeader($service->getName()) ->setHref($service->getURI()) ->setObject($service) ->addIcon( $service->getServiceType()->getServiceTypeIcon(), $service->getServiceType()->getServiceTypeShortName()); if ($service->getIsLocked() || $service->getServiceType()->isClusterServiceType()) { if ($service->getIsLocked()) { $item->addIcon('fa-lock', pht('Locked')); } else { $item->addIcon('fa-unlock-alt red', pht('Unlocked')); } } $list->addItem($item); } return $list; } } diff --git a/src/applications/audit/query/PhabricatorCommitSearchEngine.php b/src/applications/audit/query/PhabricatorCommitSearchEngine.php index 959c364696..50ff7a0c1f 100644 --- a/src/applications/audit/query/PhabricatorCommitSearchEngine.php +++ b/src/applications/audit/query/PhabricatorCommitSearchEngine.php @@ -1,221 +1,221 @@ setParameter( 'auditorPHIDs', $this->readPHIDsFromRequest($request, 'auditorPHIDs')); $saved->setParameter( 'commitAuthorPHIDs', $this->readUsersFromRequest($request, 'authors')); $saved->setParameter( 'auditStatus', $request->getStr('auditStatus')); $saved->setParameter( 'repositoryPHIDs', $this->readPHIDsFromRequest($request, 'repositoryPHIDs')); // -- TODO - T4173 - file location return $saved; } public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { $query = id(new DiffusionCommitQuery()) ->needAuditRequests(true) ->needCommitData(true); $auditor_phids = $saved->getParameter('auditorPHIDs', array()); if ($auditor_phids) { $query->withAuditorPHIDs($auditor_phids); } $commit_author_phids = $saved->getParameter('commitAuthorPHIDs', array()); if ($commit_author_phids) { $query->withAuthorPHIDs($commit_author_phids); } $audit_status = $saved->getParameter('auditStatus', null); if ($audit_status) { $query->withAuditStatus($audit_status); } $awaiting_user_phid = $saved->getParameter('awaitingUserPHID', null); if ($awaiting_user_phid) { // This is used only for the built-in "needs attention" filter, // so cheat and just use the already-loaded viewer rather than reloading // it. $query->withAuditAwaitingUser($this->requireViewer()); } $repository_phids = $saved->getParameter('repositoryPHIDs', array()); if ($repository_phids) { $query->withRepositoryPHIDs($repository_phids); } return $query; } public function buildSearchForm( AphrontFormView $form, PhabricatorSavedQuery $saved) { $auditor_phids = $saved->getParameter('auditorPHIDs', array()); $commit_author_phids = $saved->getParameter( 'commitAuthorPHIDs', array()); $audit_status = $saved->getParameter('auditStatus', null); $repository_phids = $saved->getParameter('repositoryPHIDs', array()); $phids = array_mergev( array( $auditor_phids, $commit_author_phids, $repository_phids, )); $handles = id(new PhabricatorHandleQuery()) ->setViewer($this->requireViewer()) ->withPHIDs($phids) ->execute(); $form ->appendChild( id(new AphrontFormTokenizerControl()) ->setDatasource(new DiffusionAuditorDatasource()) ->setName('auditorPHIDs') ->setLabel(pht('Auditors')) ->setValue(array_select_keys($handles, $auditor_phids))) ->appendChild( id(new AphrontFormTokenizerControl()) ->setDatasource(new PhabricatorPeopleDatasource()) ->setName('authors') ->setLabel(pht('Commit Authors')) ->setValue(array_select_keys($handles, $commit_author_phids))) ->appendChild( id(new AphrontFormSelectControl()) ->setName('auditStatus') ->setLabel(pht('Audit Status')) ->setOptions($this->getAuditStatusOptions()) ->setValue($audit_status)) ->appendChild( id(new AphrontFormTokenizerControl()) ->setLabel(pht('Repositories')) ->setName('repositoryPHIDs') ->setDatasource(new DiffusionRepositoryDatasource()) ->setValue(array_select_keys($handles, $repository_phids))); } protected function getURI($path) { return '/audit/'.$path; } - public function getBuiltinQueryNames() { + protected function getBuiltinQueryNames() { $names = array(); if ($this->requireViewer()->isLoggedIn()) { $names['need'] = pht('Need Attention'); $names['problem'] = pht('Problem Commits'); } $names['open'] = pht('Open Audits'); if ($this->requireViewer()->isLoggedIn()) { $names['authored'] = pht('Authored Commits'); } $names['all'] = pht('All Commits'); return $names; } public function buildSavedQueryFromBuiltin($query_key) { $query = $this->newSavedQuery(); $query->setQueryKey($query_key); $viewer = $this->requireViewer(); switch ($query_key) { case 'all': return $query; case 'open': $query->setParameter( 'auditStatus', DiffusionCommitQuery::AUDIT_STATUS_OPEN); return $query; case 'need': $query->setParameter('awaitingUserPHID', $viewer->getPHID()); $query->setParameter( 'auditStatus', DiffusionCommitQuery::AUDIT_STATUS_OPEN); $query->setParameter( 'auditorPHIDs', PhabricatorAuditCommentEditor::loadAuditPHIDsForUser($viewer)); return $query; case 'authored': $query->setParameter('commitAuthorPHIDs', array($viewer->getPHID())); return $query; case 'problem': $query->setParameter('commitAuthorPHIDs', array($viewer->getPHID())); $query->setParameter( 'auditStatus', DiffusionCommitQuery::AUDIT_STATUS_CONCERN); return $query; } return parent::buildSavedQueryFromBuiltin($query_key); } private function getAuditStatusOptions() { return array( DiffusionCommitQuery::AUDIT_STATUS_ANY => pht('Any'), DiffusionCommitQuery::AUDIT_STATUS_OPEN => pht('Open'), DiffusionCommitQuery::AUDIT_STATUS_CONCERN => pht('Concern Raised'), DiffusionCommitQuery::AUDIT_STATUS_ACCEPTED => pht('Accepted'), DiffusionCommitQuery::AUDIT_STATUS_PARTIAL => pht('Partially Audited'), ); } protected function renderResultList( array $commits, PhabricatorSavedQuery $query, array $handles) { assert_instances_of($commits, 'PhabricatorRepositoryCommit'); $viewer = $this->requireViewer(); $nodata = pht('No matching audits.'); $view = id(new PhabricatorAuditListView()) ->setUser($viewer) ->setCommits($commits) ->setAuthorityPHIDs( PhabricatorAuditCommentEditor::loadAuditPHIDsForUser($viewer)) ->setNoDataString($nodata); $phids = $view->getRequiredHandlePHIDs(); if ($phids) { $handles = id(new PhabricatorHandleQuery()) ->setViewer($viewer) ->withPHIDs($phids) ->execute(); } else { $handles = array(); } $view->setHandles($handles); return $view->buildList(); } } diff --git a/src/applications/calendar/query/PhabricatorCalendarEventSearchEngine.php b/src/applications/calendar/query/PhabricatorCalendarEventSearchEngine.php index e4c6356de5..ef6ee97d48 100644 --- a/src/applications/calendar/query/PhabricatorCalendarEventSearchEngine.php +++ b/src/applications/calendar/query/PhabricatorCalendarEventSearchEngine.php @@ -1,227 +1,227 @@ 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')); 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); } return $query; } public function buildSearchForm( AphrontFormView $form, PhabricatorSavedQuery $saved) { $range_start = $saved->getParameter('rangeStart'); $range_end = $saved->getParameter('rangeEnd'); $upcoming = $saved->getParameter('upcoming'); $invited_phids = $saved->getParameter('invitedPHIDs', array()); $creator_phids = $saved->getParameter('creatorPHIDs', array()); $all_phids = array_merge( $invited_phids, $creator_phids); if ($all_phids) { $handles = id(new PhabricatorHandleQuery()) ->setViewer($this->requireViewer()) ->withPHIDs($all_phids) ->execute(); } else { $handles = array(); } $invited_handles = array_select_keys($handles, $invited_phids); $creator_handles = array_select_keys($handles, $creator_phids); $form ->appendChild( id(new AphrontFormTokenizerControl()) ->setDatasource(new PhabricatorPeopleDatasource()) ->setName('creators') ->setLabel(pht('Created By')) ->setValue($creator_handles)) ->appendChild( id(new AphrontFormTokenizerControl()) ->setDatasource(new PhabricatorPeopleDatasource()) ->setName('invited') ->setLabel(pht('Invited')) ->setValue($invited_handles)) ->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.'), $upcoming)); } protected function getURI($path) { return '/calendar/event/'.$path; } - public function getBuiltinQueryNames() { + protected function getBuiltinQueryNames() { $names = array( 'upcoming' => pht('Upcoming Events'), 'all' => pht('All Events'), ); 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); } protected function getRequiredHandlePHIDsForResultList( array $objects, PhabricatorSavedQuery $query) { $phids = array(); foreach ($objects as $event) { $phids[$event->getUserPHID()] = 1; } return array_keys($phids); } protected function renderResultList( array $events, PhabricatorSavedQuery $query, array $handles) { assert_instances_of($events, 'PhabricatorCalendarEvent'); $viewer = $this->requireViewer(); $list = new PHUIObjectItemListView(); foreach ($events as $event) { if ($event->getUserPHID() == $viewer->getPHID()) { $href = $this->getApplicationURI('/event/edit/'.$event->getID().'/'); } else { $from = $event->getDateFrom(); $month = phabricator_format_local_time($from, $viewer, 'm'); $year = phabricator_format_local_time($from, $viewer, 'Y'); $uri = new PhutilURI($this->getApplicationURI()); $uri->setQueryParams( array( 'month' => $month, 'year' => $year, )); $href = (string) $uri; } $from = phabricator_datetime($event->getDateFrom(), $viewer); $to = phabricator_datetime($event->getDateTo(), $viewer); $creator_handle = $handles[$event->getUserPHID()]; $color = ($event->getStatus() == PhabricatorCalendarEvent::STATUS_AWAY) ? 'red' : 'yellow'; $item = id(new PHUIObjectItemView()) ->setHeader($event->getTerseSummary($viewer)) ->setHref($href) ->setBarColor($color) ->addByline(pht('Creator: %s', $creator_handle->renderLink())) ->addAttribute(pht('From %s to %s', $from, $to)) ->addAttribute(id(new PhutilUTF8StringTruncator()) ->setMaximumGlyphs(64) ->truncateString($event->getDescription())); $list->addItem($item); } return $list; } } diff --git a/src/applications/conduit/query/PhabricatorConduitSearchEngine.php b/src/applications/conduit/query/PhabricatorConduitSearchEngine.php index 7699294b84..199ab70216 100644 --- a/src/applications/conduit/query/PhabricatorConduitSearchEngine.php +++ b/src/applications/conduit/query/PhabricatorConduitSearchEngine.php @@ -1,200 +1,200 @@ setParameter('isStable', $request->getStr('isStable')); $saved->setParameter('isUnstable', $request->getStr('isUnstable')); $saved->setParameter('isDeprecated', $request->getStr('isDeprecated')); $saved->setParameter( 'applicationNames', $request->getStrList('applicationNames')); $saved->setParameter('nameContains', $request->getStr('nameContains')); return $saved; } public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { $query = id(new PhabricatorConduitMethodQuery()); $query->withIsStable($saved->getParameter('isStable')); $query->withIsUnstable($saved->getParameter('isUnstable')); $query->withIsDeprecated($saved->getParameter('isDeprecated')); $names = $saved->getParameter('applicationNames', array()); if ($names) { $query->withApplicationNames($names); } $contains = $saved->getParameter('nameContains'); if (strlen($contains)) { $query->withNameContains($contains); } return $query; } public function buildSearchForm( AphrontFormView $form, PhabricatorSavedQuery $saved) { $form ->appendChild( id(new AphrontFormTextControl()) ->setLabel('Name Contains') ->setName('nameContains') ->setValue($saved->getParameter('nameContains'))); $names = $saved->getParameter('applicationNames', array()); $form ->appendChild( id(new AphrontFormTextControl()) ->setLabel('Applications') ->setName('applicationNames') ->setValue(implode(', ', $names)) ->setCaption(pht( 'Example: %s', phutil_tag('tt', array(), 'differential, paste')))); $is_stable = $saved->getParameter('isStable'); $is_unstable = $saved->getParameter('isUnstable'); $is_deprecated = $saved->getParameter('isDeprecated'); $form ->appendChild( id(new AphrontFormCheckboxControl()) ->setLabel('Stability') ->addCheckbox( 'isStable', 1, hsprintf( '%s: %s', pht('Stable Methods'), pht('Show established API methods with stable interfaces.')), $is_stable) ->addCheckbox( 'isUnstable', 1, hsprintf( '%s: %s', pht('Unstable Methods'), pht('Show new methods which are subject to change.')), $is_unstable) ->addCheckbox( 'isDeprecated', 1, hsprintf( '%s: %s', pht('Deprecated Methods'), pht( 'Show old methods which will be deleted in a future '. 'version of Phabricator.')), $is_deprecated)); } protected function getURI($path) { return '/conduit/'.$path; } - public function getBuiltinQueryNames() { + protected function getBuiltinQueryNames() { return array( 'modern' => pht('Modern Methods'), 'all' => pht('All Methods'), ); } public function buildSavedQueryFromBuiltin($query_key) { $query = $this->newSavedQuery(); $query->setQueryKey($query_key); switch ($query_key) { case 'modern': return $query ->setParameter('isStable', true) ->setParameter('isUnstable', true); case 'all': return $query ->setParameter('isStable', true) ->setParameter('isUnstable', true) ->setParameter('isDeprecated', true); } return parent::buildSavedQueryFromBuiltin($query_key); } protected function renderResultList( array $methods, PhabricatorSavedQuery $query, array $handles) { assert_instances_of($methods, 'ConduitAPIMethod'); $viewer = $this->requireViewer(); $out = array(); $last = null; $list = null; foreach ($methods as $method) { $app = $method->getApplicationName(); if ($app !== $last) { $last = $app; if ($list) { $out[] = $list; } $list = id(new PHUIObjectItemListView()); $app_object = $method->getApplication(); if ($app_object) { $app_name = $app_object->getName(); } else { $app_name = $app; } } $method_name = $method->getAPIMethodName(); $item = id(new PHUIObjectItemView()) ->setHeader($method_name) ->setHref($this->getApplicationURI('method/'.$method_name.'/')) ->addAttribute($method->getMethodDescription()); switch ($method->getMethodStatus()) { case ConduitAPIMethod::METHOD_STATUS_STABLE: break; case ConduitAPIMethod::METHOD_STATUS_UNSTABLE: $item->addIcon('warning-grey', pht('Unstable')); $item->setBarColor('yellow'); break; case ConduitAPIMethod::METHOD_STATUS_DEPRECATED: $item->addIcon('warning', pht('Deprecated')); $item->setBarColor('red'); break; } $list->addItem($item); } if ($list) { $out[] = $list; } return $out; } } diff --git a/src/applications/countdown/query/PhabricatorCountdownSearchEngine.php b/src/applications/countdown/query/PhabricatorCountdownSearchEngine.php index 2a99a429c1..2e8cab39d9 100644 --- a/src/applications/countdown/query/PhabricatorCountdownSearchEngine.php +++ b/src/applications/countdown/query/PhabricatorCountdownSearchEngine.php @@ -1,150 +1,150 @@ setParameter( 'authorPHIDs', $this->readUsersFromRequest($request, 'authors')); $saved->setParameter('upcoming', $request->getBool('upcoming')); return $saved; } public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { $query = id(new PhabricatorCountdownQuery()); $author_phids = $saved->getParameter('authorPHIDs', array()); if ($author_phids) { $query->withAuthorPHIDs($author_phids); } if ($saved->getParameter('upcoming')) { $query->withUpcoming(true); } return $query; } public function buildSearchForm( AphrontFormView $form, PhabricatorSavedQuery $saved_query) { $phids = $saved_query->getParameter('authorPHIDs', array()); $author_handles = id(new PhabricatorHandleQuery()) ->setViewer($this->requireViewer()) ->withPHIDs($phids) ->execute(); $upcoming = $saved_query->getParameter('upcoming'); $form ->appendChild( id(new AphrontFormTokenizerControl()) ->setDatasource(new PhabricatorPeopleDatasource()) ->setName('authors') ->setLabel(pht('Authors')) ->setValue($author_handles)) ->appendChild( id(new AphrontFormCheckboxControl()) ->addCheckbox( 'upcoming', 1, pht('Show only countdowns that are still counting down.'), $upcoming)); } protected function getURI($path) { return '/countdown/'.$path; } - public function getBuiltinQueryNames() { + protected function getBuiltinQueryNames() { $names = array( 'upcoming' => pht('Upcoming'), 'all' => pht('All'), ); if ($this->requireViewer()->getPHID()) { $names['authored'] = pht('Authored'); } return $names; } public function buildSavedQueryFromBuiltin($query_key) { $query = $this->newSavedQuery(); $query->setQueryKey($query_key); switch ($query_key) { case 'all': return $query; case 'authored': return $query->setParameter( 'authorPHIDs', array($this->requireViewer()->getPHID())); case 'upcoming': return $query->setParameter('upcoming', true); } return parent::buildSavedQueryFromBuiltin($query_key); } protected function getRequiredHandlePHIDsForResultList( array $countdowns, PhabricatorSavedQuery $query) { return mpull($countdowns, 'getAuthorPHID'); } protected function renderResultList( array $countdowns, PhabricatorSavedQuery $query, array $handles) { assert_instances_of($countdowns, 'PhabricatorCountdown'); $viewer = $this->requireViewer(); $list = new PHUIObjectItemListView(); $list->setUser($viewer); foreach ($countdowns as $countdown) { $id = $countdown->getID(); $item = id(new PHUIObjectItemView()) ->setObjectName("C{$id}") ->setHeader($countdown->getTitle()) ->setHref($this->getApplicationURI("{$id}/")) ->addByline( pht( 'Created by %s', $handles[$countdown->getAuthorPHID()]->renderLink())); $epoch = $countdown->getEpoch(); if ($epoch >= time()) { $item->addIcon( 'none', pht('Ends %s', phabricator_datetime($epoch, $viewer))); } else { $item->addIcon( 'delete', pht('Ended %s', phabricator_datetime($epoch, $viewer))); $item->setDisabled(true); } $list->addItem($item); } return $list; } } diff --git a/src/applications/dashboard/query/PhabricatorDashboardPanelSearchEngine.php b/src/applications/dashboard/query/PhabricatorDashboardPanelSearchEngine.php index 89c78d0b0a..7a50e56526 100644 --- a/src/applications/dashboard/query/PhabricatorDashboardPanelSearchEngine.php +++ b/src/applications/dashboard/query/PhabricatorDashboardPanelSearchEngine.php @@ -1,120 +1,120 @@ setParameter('status', $request->getStr('status')); return $saved; } public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { $query = id(new PhabricatorDashboardPanelQuery()); $status = $saved->getParameter('status'); switch ($status) { case 'active': $query->withArchived(false); break; case 'archived': $query->withArchived(true); break; default: break; } return $query; } public function buildSearchForm( AphrontFormView $form, PhabricatorSavedQuery $saved_query) { $status = $saved_query->getParameter('status', ''); $form ->appendChild( id(new AphrontFormSelectControl()) ->setLabel(pht('Status')) ->setName('status') ->setValue($status) ->setOptions( array( '' => pht('(All Panels)'), 'active' => pht('Active Panels'), 'archived' => pht('Archived Panels'), ))); } protected function getURI($path) { return '/dashboard/panel/'.$path; } - public function getBuiltinQueryNames() { + protected function getBuiltinQueryNames() { return array( 'active' => pht('Active Panels'), 'all' => pht('All Panels'), ); } public function buildSavedQueryFromBuiltin($query_key) { $query = $this->newSavedQuery(); $query->setQueryKey($query_key); switch ($query_key) { case 'active': return $query->setParameter('status', 'active'); case 'all': return $query; } return parent::buildSavedQueryFromBuiltin($query_key); } protected function renderResultList( array $panels, PhabricatorSavedQuery $query, array $handles) { $viewer = $this->requireViewer(); $list = new PHUIObjectItemListView(); $list->setUser($viewer); foreach ($panels as $panel) { $item = id(new PHUIObjectItemView()) ->setObjectName($panel->getMonogram()) ->setHeader($panel->getName()) ->setHref('/'.$panel->getMonogram()) ->setObject($panel); $impl = $panel->getImplementation(); if ($impl) { $type_text = $impl->getPanelTypeName(); $type_icon = 'none'; } else { $type_text = nonempty($panel->getPanelType(), pht('Unknown Type')); $type_icon = 'fa-question'; } $item->addIcon($type_icon, $type_text); if ($panel->getIsArchived()) { $item->setDisabled(true); } $list->addItem($item); } return $list; } } diff --git a/src/applications/dashboard/query/PhabricatorDashboardSearchEngine.php b/src/applications/dashboard/query/PhabricatorDashboardSearchEngine.php index 7263e93d00..f6f50b41ff 100644 --- a/src/applications/dashboard/query/PhabricatorDashboardSearchEngine.php +++ b/src/applications/dashboard/query/PhabricatorDashboardSearchEngine.php @@ -1,110 +1,110 @@ pht('All Dashboards'), ); } public function buildSavedQueryFromBuiltin($query_key) { $query = $this->newSavedQuery(); $query->setQueryKey($query_key); switch ($query_key) { case 'all': return $query; } return parent::buildSavedQueryFromBuiltin($query_key); } protected function renderResultList( array $dashboards, PhabricatorSavedQuery $query, array $handles) { $dashboards = mpull($dashboards, null, 'getPHID'); $viewer = $this->requireViewer(); if ($dashboards) { $installs = id(new PhabricatorDashboardInstall()) ->loadAllWhere( 'objectPHID IN (%Ls) AND dashboardPHID IN (%Ls)', array( PhabricatorHomeApplication::DASHBOARD_DEFAULT, $viewer->getPHID(), ), array_keys($dashboards)); $installs = mpull($installs, null, 'getDashboardPHID'); } else { $installs = array(); } $list = new PHUIObjectItemListView(); $list->setUser($viewer); $list->initBehavior('phabricator-tooltips', array()); $list->requireResource('aphront-tooltip-css'); foreach ($dashboards as $dashboard_phid => $dashboard) { $id = $dashboard->getID(); $item = id(new PHUIObjectItemView()) ->setObjectName(pht('Dashboard %d', $id)) ->setHeader($dashboard->getName()) ->setHref($this->getApplicationURI("view/{$id}/")) ->setObject($dashboard); if (isset($installs[$dashboard_phid])) { $install = $installs[$dashboard_phid]; if ($install->getObjectPHID() == $viewer->getPHID()) { $attrs = array( 'tip' => pht( 'This dashboard is installed to your personal homepage.'), ); $item->addIcon('fa-user', pht('Installed'), $attrs); } else { $attrs = array( 'tip' => pht( 'This dashboard is the default homepage for all users.'), ); $item->addIcon('fa-globe', pht('Installed'), $attrs); } } $list->addItem($item); } return $list; } } diff --git a/src/applications/differential/query/DifferentialRevisionSearchEngine.php b/src/applications/differential/query/DifferentialRevisionSearchEngine.php index 61326399e5..d3cb3d9518 100644 --- a/src/applications/differential/query/DifferentialRevisionSearchEngine.php +++ b/src/applications/differential/query/DifferentialRevisionSearchEngine.php @@ -1,324 +1,324 @@ getQueryKey() == 'active') { return 0xFFFF; } return parent::getPageSize($saved); } public function buildSavedQueryFromRequest(AphrontRequest $request) { $saved = new PhabricatorSavedQuery(); $saved->setParameter( 'responsiblePHIDs', $this->readUsersFromRequest($request, 'responsibles')); $saved->setParameter( 'authorPHIDs', $this->readUsersFromRequest($request, 'authors')); $saved->setParameter( 'reviewerPHIDs', $this->readUsersFromRequest( $request, 'reviewers', array( PhabricatorProjectProjectPHIDType::TYPECONST, ))); $saved->setParameter( 'subscriberPHIDs', $this->readUsersFromRequest($request, 'subscribers')); $saved->setParameter( 'repositoryPHIDs', $request->getArr('repositories')); $saved->setParameter( 'draft', $request->getBool('draft')); $saved->setParameter( 'order', $request->getStr('order')); $saved->setParameter( 'status', $request->getStr('status')); return $saved; } public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { $query = id(new DifferentialRevisionQuery()) ->needFlags(true) ->needDrafts(true) ->needRelationships(true); $responsible_phids = $saved->getParameter('responsiblePHIDs', array()); if ($responsible_phids) { $query->withResponsibleUsers($responsible_phids); } $author_phids = $saved->getParameter('authorPHIDs', array()); if ($author_phids) { $query->withAuthors($author_phids); } $reviewer_phids = $saved->getParameter('reviewerPHIDs', array()); if ($reviewer_phids) { $query->withReviewers($reviewer_phids); } $subscriber_phids = $saved->getParameter('subscriberPHIDs', array()); if ($subscriber_phids) { $query->withCCs($subscriber_phids); } $repository_phids = $saved->getParameter('repositoryPHIDs', array()); if ($repository_phids) { $query->withRepositoryPHIDs($repository_phids); } $draft = $saved->getParameter('draft', false); if ($draft && $this->requireViewer()->isLoggedIn()) { $query->withDraftRepliesByAuthors( array($this->requireViewer()->getPHID())); } $status = $saved->getParameter('status'); if (idx($this->getStatusOptions(), $status)) { $query->withStatus($status); } $order = $saved->getParameter('order'); if (idx($this->getOrderOptions(), $order)) { $query->setOrder($order); } else { $query->setOrder(DifferentialRevisionQuery::ORDER_CREATED); } return $query; } public function buildSearchForm( AphrontFormView $form, PhabricatorSavedQuery $saved) { $responsible_phids = $saved->getParameter('responsiblePHIDs', array()); $author_phids = $saved->getParameter('authorPHIDs', array()); $reviewer_phids = $saved->getParameter('reviewerPHIDs', array()); $subscriber_phids = $saved->getParameter('subscriberPHIDs', array()); $repository_phids = $saved->getParameter('repositoryPHIDs', array()); $only_draft = $saved->getParameter('draft', false); $all_phids = array_mergev( array( $responsible_phids, $author_phids, $reviewer_phids, $subscriber_phids, $repository_phids, )); $handles = id(new PhabricatorHandleQuery()) ->setViewer($this->requireViewer()) ->withPHIDs($all_phids) ->execute(); $form ->appendChild( id(new AphrontFormTokenizerControl()) ->setLabel(pht('Responsible Users')) ->setName('responsibles') ->setDatasource(new PhabricatorPeopleDatasource()) ->setValue(array_select_keys($handles, $responsible_phids))) ->appendChild( id(new AphrontFormTokenizerControl()) ->setLabel(pht('Authors')) ->setName('authors') ->setDatasource(new PhabricatorPeopleDatasource()) ->setValue(array_select_keys($handles, $author_phids))) ->appendChild( id(new AphrontFormTokenizerControl()) ->setLabel(pht('Reviewers')) ->setName('reviewers') ->setDatasource(new PhabricatorProjectOrUserDatasource()) ->setValue(array_select_keys($handles, $reviewer_phids))) ->appendChild( id(new AphrontFormTokenizerControl()) ->setLabel(pht('Subscribers')) ->setName('subscribers') ->setDatasource(new PhabricatorMetaMTAMailableDatasource()) ->setValue(array_select_keys($handles, $subscriber_phids))) ->appendChild( id(new AphrontFormTokenizerControl()) ->setLabel(pht('Repositories')) ->setName('repositories') ->setDatasource(new DiffusionRepositoryDatasource()) ->setValue(array_select_keys($handles, $repository_phids))) ->appendChild( id(new AphrontFormSelectControl()) ->setLabel(pht('Status')) ->setName('status') ->setOptions($this->getStatusOptions()) ->setValue($saved->getParameter('status'))); if ($this->requireViewer()->isLoggedIn()) { $form ->appendChild( id(new AphrontFormCheckboxControl()) ->addCheckbox( 'draft', 1, pht('Show only revisions with a draft comment.'), $only_draft)); } $form ->appendChild( id(new AphrontFormSelectControl()) ->setLabel(pht('Order')) ->setName('order') ->setOptions($this->getOrderOptions()) ->setValue($saved->getParameter('order'))); } protected function getURI($path) { return '/differential/'.$path; } - public function getBuiltinQueryNames() { + protected function getBuiltinQueryNames() { $names = array(); if ($this->requireViewer()->isLoggedIn()) { $names['active'] = pht('Active Revisions'); $names['authored'] = pht('Authored'); } $names['all'] = pht('All Revisions'); return $names; } public function buildSavedQueryFromBuiltin($query_key) { $query = $this->newSavedQuery(); $query->setQueryKey($query_key); $viewer = $this->requireViewer(); switch ($query_key) { case 'active': return $query ->setParameter('responsiblePHIDs', array($viewer->getPHID())) ->setParameter('status', DifferentialRevisionQuery::STATUS_OPEN); case 'authored': return $query ->setParameter('authorPHIDs', array($viewer->getPHID())); case 'all': return $query; } return parent::buildSavedQueryFromBuiltin($query_key); } private function getStatusOptions() { return array( DifferentialRevisionQuery::STATUS_ANY => pht('All'), DifferentialRevisionQuery::STATUS_OPEN => pht('Open'), DifferentialRevisionQuery::STATUS_ACCEPTED => pht('Accepted'), DifferentialRevisionQuery::STATUS_NEEDS_REVIEW => pht('Needs Review'), DifferentialRevisionQuery::STATUS_NEEDS_REVISION => pht('Needs Revision'), DifferentialRevisionQuery::STATUS_CLOSED => pht('Closed'), DifferentialRevisionQuery::STATUS_ABANDONED => pht('Abandoned'), ); } private function getOrderOptions() { return array( DifferentialRevisionQuery::ORDER_CREATED => pht('Created'), DifferentialRevisionQuery::ORDER_MODIFIED => pht('Updated'), ); } protected function renderResultList( array $revisions, PhabricatorSavedQuery $query, array $handles) { assert_instances_of($revisions, 'DifferentialRevision'); $viewer = $this->requireViewer(); $template = id(new DifferentialRevisionListView()) ->setUser($viewer); $views = array(); if ($query->getQueryKey() == 'active') { $split = DifferentialRevisionQuery::splitResponsible( $revisions, $query->getParameter('responsiblePHIDs')); list($blocking, $active, $waiting) = $split; $views[] = id(clone $template) ->setHeader(pht('Blocking Others')) ->setNoDataString( pht('No revisions are blocked on your action.')) ->setHighlightAge(true) ->setRevisions($blocking) ->setHandles(array()); $views[] = id(clone $template) ->setHeader(pht('Action Required')) ->setNoDataString( pht('No revisions require your action.')) ->setHighlightAge(true) ->setRevisions($active) ->setHandles(array()); $views[] = id(clone $template) ->setHeader(pht('Waiting on Others')) ->setNoDataString( pht('You have no revisions waiting on others.')) ->setRevisions($waiting) ->setHandles(array()); } else { $views[] = id(clone $template) ->setRevisions($revisions) ->setHandles(array()); } $phids = array_mergev(mpull($views, 'getRequiredHandlePHIDs')); if ($phids) { $handles = id(new PhabricatorHandleQuery()) ->setViewer($viewer) ->withPHIDs($phids) ->execute(); } else { $handles = array(); } foreach ($views as $view) { $view->setHandles($handles); } if (count($views) == 1) { // Reduce this to a PHUIObjectItemListView so we can get the free // support from ApplicationSearch. return head($views)->render(); } else { return $views; } } } diff --git a/src/applications/diviner/query/DivinerAtomSearchEngine.php b/src/applications/diviner/query/DivinerAtomSearchEngine.php index 014ac3ad5e..ff9e7e480c 100644 --- a/src/applications/diviner/query/DivinerAtomSearchEngine.php +++ b/src/applications/diviner/query/DivinerAtomSearchEngine.php @@ -1,122 +1,122 @@ setParameter( 'types', $this->readListFromRequest($request, 'types')); $saved->setParameter('name', $request->getStr('name')); return $saved; } public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { $query = id(new DivinerAtomQuery()); $types = $saved->getParameter('types'); if ($types) { $query->withTypes($types); } $name = $saved->getParameter('name'); if ($name) { $query->withNameContains($name); } return $query; } public function buildSearchForm( AphrontFormView $form, PhabricatorSavedQuery $saved) { $all_types = array(); foreach (DivinerAtom::getAllTypes() as $type) { $all_types[$type] = DivinerAtom::getAtomTypeNameString($type); } asort($all_types); $types = $saved->getParameter('types', array()); $types = array_fuse($types); $type_control = id(new AphrontFormCheckboxControl()) ->setLabel(pht('Types')); foreach ($all_types as $type => $name) { $type_control->addCheckbox( 'types[]', $type, $name, isset($types[$type])); } $form ->appendChild( id(new AphrontFormTextControl()) ->setLabel(pht('Name Contains')) ->setName('name') ->setValue($saved->getParameter('name'))) ->appendChild($type_control); } protected function getURI($path) { return '/diviner/'.$path; } - public function getBuiltinQueryNames() { + protected function getBuiltinQueryNames() { return array( 'all' => pht('All'), ); } public function buildSavedQueryFromBuiltin($query_key) { $query = $this->newSavedQuery(); $query->setQueryKey($query_key); switch ($query_key) { case 'all': return $query; } return parent::buildSavedQueryFromBuiltin($query_key); } protected function renderResultList( array $symbols, PhabricatorSavedQuery $query, array $handles) { assert_instances_of($symbols, 'DivinerLiveSymbol'); $viewer = $this->requireViewer(); $list = id(new PHUIObjectItemListView()) ->setUser($viewer); foreach ($symbols as $symbol) { $type = $symbol->getType(); $type_name = DivinerAtom::getAtomTypeNameString($type); $item = id(new PHUIObjectItemView()) ->setHeader($symbol->getTitle()) ->setHref($symbol->getURI()) ->addAttribute($symbol->getSummary()) ->addIcon('none', $type_name); $list->addItem($item); } return $list; } } diff --git a/src/applications/drydock/query/DrydockBlueprintSearchEngine.php b/src/applications/drydock/query/DrydockBlueprintSearchEngine.php index adf1300bf4..8895ed09bb 100644 --- a/src/applications/drydock/query/DrydockBlueprintSearchEngine.php +++ b/src/applications/drydock/query/DrydockBlueprintSearchEngine.php @@ -1,75 +1,75 @@ pht('All Blueprints'), ); } public function buildSavedQueryFromBuiltin($query_key) { $query = $this->newSavedQuery(); $query->setQueryKey($query_key); switch ($query_key) { case 'all': return $query; } return parent::buildSavedQueryFromBuiltin($query_key); } - public function renderResultList( + protected function renderResultList( array $blueprints, PhabricatorSavedQuery $query, array $handles) { assert_instances_of($blueprints, 'DrydockBlueprint'); $viewer = $this->requireViewer(); $view = new PHUIObjectItemListView(); foreach ($blueprints as $blueprint) { $item = id(new PHUIObjectItemView()) ->setHeader($blueprint->getBlueprintName()) ->setHref($this->getApplicationURI('/blueprint/'.$blueprint->getID())) ->setObjectName(pht('Blueprint %d', $blueprint->getID())); if (!$blueprint->getImplementation()->isEnabled()) { $item->setDisabled(true); } $item->addAttribute($blueprint->getImplementation()->getBlueprintName()); $view->addItem($item); } return $view; } } diff --git a/src/applications/drydock/query/DrydockLeaseSearchEngine.php b/src/applications/drydock/query/DrydockLeaseSearchEngine.php index 16b606e83a..fffca96a3b 100644 --- a/src/applications/drydock/query/DrydockLeaseSearchEngine.php +++ b/src/applications/drydock/query/DrydockLeaseSearchEngine.php @@ -1,98 +1,98 @@ setParameter( 'statuses', $this->readListFromRequest($request, 'statuses')); return $saved; } public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { $query = id(new DrydockLeaseQuery()); $statuses = $saved->getParameter('statuses', array()); if ($statuses) { $query->withStatuses($statuses); } return $query; } public function buildSearchForm( AphrontFormView $form, PhabricatorSavedQuery $saved) { $statuses = $saved->getParameter('statuses', array()); $status_control = id(new AphrontFormCheckboxControl()) ->setLabel(pht('Status')); foreach (DrydockLeaseStatus::getAllStatuses() as $status) { $status_control->addCheckbox( 'statuses[]', $status, DrydockLeaseStatus::getNameForStatus($status), in_array($status, $statuses)); } $form ->appendChild($status_control); } protected function getURI($path) { return '/drydock/lease/'.$path; } - public function getBuiltinQueryNames() { + protected function getBuiltinQueryNames() { return array( 'active' => pht('Active Leases'), 'all' => pht('All Leases'), ); } public function buildSavedQueryFromBuiltin($query_key) { $query = $this->newSavedQuery(); $query->setQueryKey($query_key); switch ($query_key) { case 'active': return $query->setParameter( 'statuses', array( DrydockLeaseStatus::STATUS_PENDING, DrydockLeaseStatus::STATUS_ACQUIRING, DrydockLeaseStatus::STATUS_ACTIVE, )); case 'all': return $query; } return parent::buildSavedQueryFromBuiltin($query_key); } protected function renderResultList( array $leases, PhabricatorSavedQuery $saved, array $handles) { return id(new DrydockLeaseListView()) ->setUser($this->requireViewer()) ->setLeases($leases) ->render(); } } diff --git a/src/applications/drydock/query/DrydockLogSearchEngine.php b/src/applications/drydock/query/DrydockLogSearchEngine.php index 12eec9afc9..915c503868 100644 --- a/src/applications/drydock/query/DrydockLogSearchEngine.php +++ b/src/applications/drydock/query/DrydockLogSearchEngine.php @@ -1,58 +1,58 @@ pht('All Logs'), ); } public function buildSavedQueryFromBuiltin($query_key) { $query = $this->newSavedQuery(); $query->setQueryKey($query_key); switch ($query_key) { case 'all': return $query; } return parent::buildSavedQueryFromBuiltin($query_key); } protected function renderResultList( array $logs, PhabricatorSavedQuery $query, array $handles) { return id(new DrydockLogListView()) ->setUser($this->requireViewer()) ->setLogs($logs) ->render(); } } diff --git a/src/applications/drydock/query/DrydockResourceSearchEngine.php b/src/applications/drydock/query/DrydockResourceSearchEngine.php index 9f0e2b0012..a17d2fd600 100644 --- a/src/applications/drydock/query/DrydockResourceSearchEngine.php +++ b/src/applications/drydock/query/DrydockResourceSearchEngine.php @@ -1,96 +1,96 @@ setParameter( 'statuses', $this->readListFromRequest($request, 'statuses')); return $saved; } public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { $query = id(new DrydockResourceQuery()); $statuses = $saved->getParameter('statuses', array()); if ($statuses) { $query->withStatuses($statuses); } return $query; } public function buildSearchForm( AphrontFormView $form, PhabricatorSavedQuery $saved) { $statuses = $saved->getParameter('statuses', array()); $status_control = id(new AphrontFormCheckboxControl()) ->setLabel(pht('Status')); foreach (DrydockResourceStatus::getAllStatuses() as $status) { $status_control->addCheckbox( 'statuses[]', $status, DrydockResourceStatus::getNameForStatus($status), in_array($status, $statuses)); } $form ->appendChild($status_control); } protected function getURI($path) { return '/drydock/resource/'.$path; } - public function getBuiltinQueryNames() { + protected function getBuiltinQueryNames() { return array( 'active' => pht('Active Resources'), 'all' => pht('All Resources'), ); } public function buildSavedQueryFromBuiltin($query_key) { $query = $this->newSavedQuery(); $query->setQueryKey($query_key); switch ($query_key) { case 'active': return $query->setParameter( 'statuses', array( DrydockResourceStatus::STATUS_PENDING, DrydockResourceStatus::STATUS_OPEN, )); case 'all': return $query; } return parent::buildSavedQueryFromBuiltin($query_key); } protected function renderResultList( array $resources, PhabricatorSavedQuery $query, array $handles) { return id(new DrydockResourceListView()) ->setUser($this->requireViewer()) ->setResources($resources) ->render(); } } diff --git a/src/applications/feed/query/PhabricatorFeedSearchEngine.php b/src/applications/feed/query/PhabricatorFeedSearchEngine.php index 268406a335..d84960e950 100644 --- a/src/applications/feed/query/PhabricatorFeedSearchEngine.php +++ b/src/applications/feed/query/PhabricatorFeedSearchEngine.php @@ -1,150 +1,150 @@ setParameter( 'userPHIDs', $this->readUsersFromRequest($request, 'users')); $saved->setParameter( 'projectPHIDs', array_values($request->getArr('projectPHIDs'))); $saved->setParameter( 'viewerProjects', $request->getBool('viewerProjects')); return $saved; } public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { $query = id(new PhabricatorFeedQuery()); $phids = array(); $user_phids = $saved->getParameter('userPHIDs'); if ($user_phids) { $phids[] = $user_phids; } $proj_phids = $saved->getParameter('projectPHIDs'); if ($proj_phids) { $phids[] = $proj_phids; } $viewer_projects = $saved->getParameter('viewerProjects'); if ($viewer_projects) { $viewer = $this->requireViewer(); $projects = id(new PhabricatorProjectQuery()) ->setViewer($viewer) ->withMemberPHIDs(array($viewer->getPHID())) ->execute(); $phids[] = mpull($projects, 'getPHID'); } $phids = array_mergev($phids); if ($phids) { $query->setFilterPHIDs($phids); } return $query; } public function buildSearchForm( AphrontFormView $form, PhabricatorSavedQuery $saved_query) { $user_phids = $saved_query->getParameter('userPHIDs', array()); $proj_phids = $saved_query->getParameter('projectPHIDs', array()); $phids = array_merge($user_phids, $proj_phids); $handles = id(new PhabricatorHandleQuery()) ->setViewer($this->requireViewer()) ->withPHIDs($phids) ->execute(); $user_handles = array_select_keys($handles, $user_phids); $proj_handles = array_select_keys($handles, $proj_phids); $viewer_projects = $saved_query->getParameter('viewerProjects'); $form ->appendChild( id(new AphrontFormTokenizerControl()) ->setDatasource(new PhabricatorPeopleDatasource()) ->setName('users') ->setLabel(pht('Include Users')) ->setValue($user_handles)) ->appendChild( id(new AphrontFormTokenizerControl()) ->setDatasource(new PhabricatorProjectDatasource()) ->setName('projectPHIDs') ->setLabel(pht('Include Projects')) ->setValue($proj_handles)) ->appendChild( id(new AphrontFormCheckboxControl()) ->addCheckbox( 'viewerProjects', 1, pht('Include stories about projects I am a member of.'), $viewer_projects)); } protected function getURI($path) { return '/feed/'.$path; } - public function getBuiltinQueryNames() { + protected function getBuiltinQueryNames() { $names = array( 'all' => pht('All Stories'), ); if ($this->requireViewer()->isLoggedIn()) { $names['projects'] = pht('Projects'); } return $names; } public function buildSavedQueryFromBuiltin($query_key) { $query = $this->newSavedQuery(); $query->setQueryKey($query_key); switch ($query_key) { case 'all': return $query; case 'projects': return $query->setParameter('viewerProjects', true); } return parent::buildSavedQueryFromBuiltin($query_key); } protected function renderResultList( array $objects, PhabricatorSavedQuery $query, array $handles) { $builder = new PhabricatorFeedBuilder($objects); if ($this->isPanelContext()) { $builder->setShowHovercards(false); } else { $builder->setShowHovercards(true); } $builder->setUser($this->requireViewer()); $view = $builder->buildView(); return phutil_tag_div('phabricator-feed-frame', $view); } } diff --git a/src/applications/files/query/PhabricatorFileSearchEngine.php b/src/applications/files/query/PhabricatorFileSearchEngine.php index 1811630f45..c11361be69 100644 --- a/src/applications/files/query/PhabricatorFileSearchEngine.php +++ b/src/applications/files/query/PhabricatorFileSearchEngine.php @@ -1,188 +1,188 @@ setParameter( 'authorPHIDs', $this->readUsersFromRequest($request, 'authors')); $saved->setParameter('explicit', $request->getBool('explicit')); $saved->setParameter('createdStart', $request->getStr('createdStart')); $saved->setParameter('createdEnd', $request->getStr('createdEnd')); return $saved; } public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { $query = id(new PhabricatorFileQuery()) ->withAuthorPHIDs($saved->getParameter('authorPHIDs', array())); if ($saved->getParameter('explicit')) { $query->showOnlyExplicitUploads(true); } $start = $this->parseDateTime($saved->getParameter('createdStart')); $end = $this->parseDateTime($saved->getParameter('createdEnd')); if ($start) { $query->withDateCreatedAfter($start); } if ($end) { $query->withDateCreatedBefore($end); } return $query; } public function buildSearchForm( AphrontFormView $form, PhabricatorSavedQuery $saved_query) { $phids = $saved_query->getParameter('authorPHIDs', array()); $author_handles = id(new PhabricatorHandleQuery()) ->setViewer($this->requireViewer()) ->withPHIDs($phids) ->execute(); $explicit = $saved_query->getParameter('explicit'); $form ->appendChild( id(new AphrontFormTokenizerControl()) ->setDatasource(new PhabricatorPeopleDatasource()) ->setName('authors') ->setLabel(pht('Authors')) ->setValue($author_handles)) ->appendChild( id(new AphrontFormCheckboxControl()) ->addCheckbox( 'explicit', 1, pht('Show only manually uploaded files.'), $explicit)); $this->buildDateRange( $form, $saved_query, 'createdStart', pht('Created After'), 'createdEnd', pht('Created Before')); } protected function getURI($path) { return '/file/'.$path; } - public function getBuiltinQueryNames() { + protected function getBuiltinQueryNames() { $names = array(); if ($this->requireViewer()->isLoggedIn()) { $names['authored'] = pht('Authored'); } $names += array( 'all' => pht('All'), ); return $names; } public function buildSavedQueryFromBuiltin($query_key) { $query = $this->newSavedQuery(); $query->setQueryKey($query_key); switch ($query_key) { case 'all': return $query; case 'authored': $author_phid = array($this->requireViewer()->getPHID()); return $query ->setParameter('authorPHIDs', $author_phid) ->setParameter('explicit', true); } return parent::buildSavedQueryFromBuiltin($query_key); } protected function getRequiredHandlePHIDsForResultList( array $files, PhabricatorSavedQuery $query) { return mpull($files, 'getAuthorPHID'); } protected function renderResultList( array $files, PhabricatorSavedQuery $query, array $handles) { assert_instances_of($files, 'PhabricatorFile'); $request = $this->getRequest(); if ($request) { $highlighted_ids = $request->getStrList('h'); } else { $highlighted_ids = array(); } $viewer = $this->requireViewer(); $highlighted_ids = array_fill_keys($highlighted_ids, true); $list_view = id(new PHUIObjectItemListView()) ->setUser($viewer); foreach ($files as $file) { $id = $file->getID(); $phid = $file->getPHID(); $name = $file->getName(); $file_uri = $this->getApplicationURI("/info/{$phid}/"); $date_created = phabricator_date($file->getDateCreated(), $viewer); $author_phid = $file->getAuthorPHID(); if ($author_phid) { $author_link = $handles[$author_phid]->renderLink(); $uploaded = pht('Uploaded by %s on %s', $author_link, $date_created); } else { $uploaded = pht('Uploaded on %s', $date_created); } $item = id(new PHUIObjectItemView()) ->setObject($file) ->setObjectName("F{$id}") ->setHeader($name) ->setHref($file_uri) ->addAttribute($uploaded) ->addIcon('none', phutil_format_bytes($file->getByteSize())); $ttl = $file->getTTL(); if ($ttl !== null) { $item->addIcon('blame', pht('Temporary')); } if (isset($highlighted_ids[$id])) { $item->setEffect('highlighted'); } $list_view->addItem($item); } $list_view->appendChild(id(new PhabricatorGlobalUploadTargetView()) ->setUser($viewer)); return $list_view; } } diff --git a/src/applications/flag/query/PhabricatorFlagSearchEngine.php b/src/applications/flag/query/PhabricatorFlagSearchEngine.php index e973fa428b..4c9308f04f 100644 --- a/src/applications/flag/query/PhabricatorFlagSearchEngine.php +++ b/src/applications/flag/query/PhabricatorFlagSearchEngine.php @@ -1,182 +1,182 @@ setParameter('colors', $request->getArr('colors')); $saved->setParameter('group', $request->getStr('group')); $saved->setParameter('objectFilter', $request->getStr('objectFilter')); return $saved; } public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { $query = id(new PhabricatorFlagQuery()) ->needHandles(true) ->withOwnerPHIDs(array($this->requireViewer()->getPHID())); $colors = $saved->getParameter('colors'); if ($colors) { $query->withColors($colors); } $group = $saved->getParameter('group'); $options = $this->getGroupOptions(); if ($group && isset($options[$group])) { $query->setGroupBy($group); } $object_filter = $saved->getParameter('objectFilter'); $objects = $this->getObjectFilterOptions(); if ($object_filter && isset($objects[$object_filter])) { $query->withTypes(array($object_filter)); } return $query; } public function buildSearchForm( AphrontFormView $form, PhabricatorSavedQuery $saved_query) { $form ->appendChild( id(new PhabricatorFlagSelectControl()) ->setName('colors') ->setLabel(pht('Colors')) ->setValue($saved_query->getParameter('colors', array()))) ->appendChild( id(new AphrontFormSelectControl()) ->setName('group') ->setLabel(pht('Group By')) ->setValue($saved_query->getParameter('group')) ->setOptions($this->getGroupOptions())) ->appendChild( id(new AphrontFormSelectControl()) ->setName('objectFilter') ->setLabel(pht('Object Type')) ->setValue($saved_query->getParameter('objectFilter')) ->setOptions($this->getObjectFilterOptions())); } protected function getURI($path) { return '/flag/'.$path; } - public function getBuiltinQueryNames() { + protected function getBuiltinQueryNames() { $names = array( 'all' => pht('Flagged'), ); return $names; } public function buildSavedQueryFromBuiltin($query_key) { $query = $this->newSavedQuery(); $query->setQueryKey($query_key); switch ($query_key) { case 'all': return $query; } return parent::buildSavedQueryFromBuiltin($query_key); } private function getGroupOptions() { return array( PhabricatorFlagQuery::GROUP_NONE => pht('None'), PhabricatorFlagQuery::GROUP_COLOR => pht('Color'), ); } private function getObjectFilterOptions() { $objects = id(new PhutilSymbolLoader()) ->setAncestorClass('PhabricatorFlaggableInterface') ->loadObjects(); $all_types = PhabricatorPHIDType::getAllTypes(); $options = array(); foreach ($objects as $object) { $phid = $object->generatePHID(); $phid_type = phid_get_type($phid); $type_object = idx($all_types, $phid_type); if ($type_object) { $options[$phid_type] = $type_object->getTypeName(); } } // sort it alphabetically... asort($options); $default_option = array( 0 => pht('All Object Types'), ); // ...and stick the default option on front $options = array_merge($default_option, $options); return $options; } protected function renderResultList( array $flags, PhabricatorSavedQuery $query, array $handles) { assert_instances_of($flags, 'PhabricatorFlag'); $viewer = $this->requireViewer(); $list = id(new PHUIObjectItemListView()) ->setUser($viewer); foreach ($flags as $flag) { $id = $flag->getID(); $phid = $flag->getObjectPHID(); $class = PhabricatorFlagColor::getCSSClass($flag->getColor()); $flag_icon = phutil_tag( 'div', array( 'class' => 'phabricator-flag-icon '.$class, ), ''); $item = id(new PHUIObjectItemView()) ->addHeadIcon($flag_icon) ->setHeader($flag->getHandle()->getFullName()) ->setHref($flag->getHandle()->getURI()); $item->addAction( id(new PHUIListItemView()) ->setIcon('fa-pencil') ->setHref($this->getApplicationURI("edit/{$phid}/")) ->setWorkflow(true)); $item->addAction( id(new PHUIListItemView()) ->setIcon('fa-times') ->setHref($this->getApplicationURI("delete/{$id}/")) ->setWorkflow(true)); if ($flag->getNote()) { $item->addAttribute($flag->getNote()); } $item->addIcon( 'none', phabricator_datetime($flag->getDateCreated(), $viewer)); $list->addItem($item); } return $list; } } diff --git a/src/applications/fund/query/FundBackerSearchEngine.php b/src/applications/fund/query/FundBackerSearchEngine.php index 4ad4b7c538..a634fbfe42 100644 --- a/src/applications/fund/query/FundBackerSearchEngine.php +++ b/src/applications/fund/query/FundBackerSearchEngine.php @@ -1,160 +1,160 @@ initiative = $initiative; return $this; } public function getInitiative() { return $this->initiative; } public function getResultTypeDescription() { return pht('Fund Backers'); } - public function getApplicationClassName() { + protected function getApplicationClassName() { return 'PhabricatorFundApplication'; } public function buildSavedQueryFromRequest(AphrontRequest $request) { $saved = new PhabricatorSavedQuery(); $saved->setParameter( 'backerPHIDs', $this->readUsersFromRequest($request, 'backers')); return $saved; } public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { $query = id(new FundBackerQuery()); $query->withStatuses(array(FundBacker::STATUS_PURCHASED)); if ($this->getInitiative()) { $query->withInitiativePHIDs( array( $this->getInitiative()->getPHID(), )); } $backer_phids = $saved->getParameter('backerPHIDs'); if ($backer_phids) { $query->withBackerPHIDs($backer_phids); } return $query; } public function buildSearchForm( AphrontFormView $form, PhabricatorSavedQuery $saved) { $backer_phids = $saved->getParameter('backerPHIDs', array()); $all_phids = array_mergev( array( $backer_phids, )); $handles = id(new PhabricatorHandleQuery()) ->setViewer($this->requireViewer()) ->withPHIDs($all_phids) ->execute(); $form ->appendChild( id(new AphrontFormTokenizerControl()) ->setLabel(pht('Backers')) ->setName('backers') ->setDatasource(new PhabricatorPeopleDatasource()) ->setValue(array_select_keys($handles, $backer_phids))); } protected function getURI($path) { if ($this->getInitiative()) { return '/fund/backers/'.$this->getInitiative()->getID().'/'.$path; } else { return '/fund/backers/'.$path; } } - public function getBuiltinQueryNames() { + protected function getBuiltinQueryNames() { $names = array(); $names['all'] = pht('All Backers'); return $names; } public function buildSavedQueryFromBuiltin($query_key) { $query = $this->newSavedQuery(); $query->setQueryKey($query_key); switch ($query_key) { case 'all': return $query; } return parent::buildSavedQueryFromBuiltin($query_key); } protected function getRequiredHandlePHIDsForResultList( array $backers, PhabricatorSavedQuery $query) { $phids = array(); foreach ($backers as $backer) { $phids[] = $backer->getBackerPHID(); $phids[] = $backer->getInitiativePHID(); } return $phids; } protected function renderResultList( array $backers, PhabricatorSavedQuery $query, array $handles) { assert_instances_of($backers, 'FundBacker'); $viewer = $this->requireViewer(); $rows = array(); foreach ($backers as $backer) { $rows[] = array( $handles[$backer->getInitiativePHID()]->renderLink(), $handles[$backer->getBackerPHID()]->renderLink(), $backer->getAmountAsCurrency()->formatForDisplay(), phabricator_datetime($backer->getDateCreated(), $viewer), ); } $table = id(new AphrontTableView($rows)) ->setHeaders( array( pht('Initiative'), pht('Backer'), pht('Amount'), pht('Date'), )) ->setColumnClasses( array( null, null, 'wide right', 'right', )); return id(new PHUIObjectBoxView()) ->setHeaderText(pht('Backers')) ->appendChild($table); } } diff --git a/src/applications/fund/query/FundInitiativeSearchEngine.php b/src/applications/fund/query/FundInitiativeSearchEngine.php index 17e5f585f8..63c25952ee 100644 --- a/src/applications/fund/query/FundInitiativeSearchEngine.php +++ b/src/applications/fund/query/FundInitiativeSearchEngine.php @@ -1,180 +1,180 @@ setParameter( 'ownerPHIDs', $this->readUsersFromRequest($request, 'owners')); $saved->setParameter( 'statuses', $this->readListFromRequest($request, 'statuses')); return $saved; } public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { $query = id(new FundInitiativeQuery()) ->needProjectPHIDs(true); $owner_phids = $saved->getParameter('ownerPHIDs'); if ($owner_phids) { $query->withOwnerPHIDs($owner_phids); } $statuses = $saved->getParameter('statuses'); if ($statuses) { $query->withStatuses($statuses); } return $query; } public function buildSearchForm( AphrontFormView $form, PhabricatorSavedQuery $saved) { $statuses = $saved->getParameter('statuses', array()); $statuses = array_fuse($statuses); $owner_phids = $saved->getParameter('ownerPHIDs', array()); $all_phids = array_mergev( array( $owner_phids, )); $handles = id(new PhabricatorHandleQuery()) ->setViewer($this->requireViewer()) ->withPHIDs($all_phids) ->execute(); $status_map = FundInitiative::getStatusNameMap(); $status_control = id(new AphrontFormCheckboxControl()) ->setLabel(pht('Statuses')); foreach ($status_map as $status => $name) { $status_control->addCheckbox( 'statuses[]', $status, $name, isset($statuses[$status])); } $form ->appendChild( id(new AphrontFormTokenizerControl()) ->setLabel(pht('Owners')) ->setName('owners') ->setDatasource(new PhabricatorPeopleDatasource()) ->setValue(array_select_keys($handles, $owner_phids))) ->appendChild($status_control); } protected function getURI($path) { return '/fund/'.$path; } - public function getBuiltinQueryNames() { + protected function getBuiltinQueryNames() { $names = array(); $names['open'] = pht('Open Initiatives'); if ($this->requireViewer()->isLoggedIn()) { $names['owned'] = pht('Owned Initiatives'); } $names['all'] = pht('All Initiatives'); return $names; } public function buildSavedQueryFromBuiltin($query_key) { $query = $this->newSavedQuery(); $query->setQueryKey($query_key); switch ($query_key) { case 'all': return $query; case 'owned': return $query->setParameter( 'ownerPHIDs', array( $this->requireViewer()->getPHID(), )); case 'open': return $query->setParameter( 'statuses', array( FundInitiative::STATUS_OPEN, )); } return parent::buildSavedQueryFromBuiltin($query_key); } protected function getRequiredHandlePHIDsForResultList( array $initiatives, PhabricatorSavedQuery $query) { $phids = array(); foreach ($initiatives as $initiative) { $phids[] = $initiative->getOwnerPHID(); foreach ($initiative->getProjectPHIDs() as $project_phid) { $phids[] = $project_phid; } } return $phids; } protected function renderResultList( array $initiatives, PhabricatorSavedQuery $query, array $handles) { assert_instances_of($initiatives, 'FundInitiative'); $viewer = $this->requireViewer(); $list = id(new PHUIObjectItemListView()); foreach ($initiatives as $initiative) { $owner_handle = $handles[$initiative->getOwnerPHID()]; $item = id(new PHUIObjectItemView()) ->setObjectName($initiative->getMonogram()) ->setHeader($initiative->getName()) ->setHref('/'.$initiative->getMonogram()) ->addByline(pht('Owner: %s', $owner_handle->renderLink())); if ($initiative->isClosed()) { $item->setDisabled(true); } $project_handles = array_select_keys( $handles, $initiative->getProjectPHIDs()); if ($project_handles) { $item->addAttribute( id(new PHUIHandleTagListView()) ->setLimit(4) ->setSlim(true) ->setHandles($project_handles)); } $list->addItem($item); } return $list; } } diff --git a/src/applications/harbormaster/query/HarbormasterBuildPlanSearchEngine.php b/src/applications/harbormaster/query/HarbormasterBuildPlanSearchEngine.php index 70d5b867d1..d72d9e18f3 100644 --- a/src/applications/harbormaster/query/HarbormasterBuildPlanSearchEngine.php +++ b/src/applications/harbormaster/query/HarbormasterBuildPlanSearchEngine.php @@ -1,114 +1,114 @@ setParameter( 'status', $this->readListFromRequest($request, 'status')); return $saved; } public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { $query = id(new HarbormasterBuildPlanQuery()); $status = $saved->getParameter('status', array()); if ($status) { $query->withStatuses($status); } return $query; } public function buildSearchForm( AphrontFormView $form, PhabricatorSavedQuery $saved_query) { $status = $saved_query->getParameter('status', array()); $form ->appendChild( id(new AphrontFormCheckboxControl()) ->setLabel('Status') ->addCheckbox( 'status[]', HarbormasterBuildPlan::STATUS_ACTIVE, pht('Active'), in_array(HarbormasterBuildPlan::STATUS_ACTIVE, $status)) ->addCheckbox( 'status[]', HarbormasterBuildPlan::STATUS_DISABLED, pht('Disabled'), in_array(HarbormasterBuildPlan::STATUS_DISABLED, $status))); } protected function getURI($path) { return '/harbormaster/plan/'.$path; } - public function getBuiltinQueryNames() { + protected function getBuiltinQueryNames() { return array( 'active' => pht('Active Plans'), 'all' => pht('All Plans'), ); } public function buildSavedQueryFromBuiltin($query_key) { $query = $this->newSavedQuery(); $query->setQueryKey($query_key); switch ($query_key) { case 'active': return $query->setParameter( 'status', array( HarbormasterBuildPlan::STATUS_ACTIVE, )); case 'all': return $query; } return parent::buildSavedQueryFromBuiltin($query_key); } protected function renderResultList( array $plans, PhabricatorSavedQuery $query, array $handles) { assert_instances_of($plans, 'HarbormasterBuildPlan'); $viewer = $this->requireViewer(); $list = new PHUIObjectItemListView(); foreach ($plans as $plan) { $id = $plan->getID(); $item = id(new PHUIObjectItemView()) ->setObjectName(pht('Plan %d', $plan->getID())) ->setHeader($plan->getName()); if ($plan->isDisabled()) { $item->setDisabled(true); } $item->setHref($this->getApplicationURI("plan/{$id}/")); $list->addItem($item); } return $list; } } diff --git a/src/applications/harbormaster/query/HarbormasterBuildableSearchEngine.php b/src/applications/harbormaster/query/HarbormasterBuildableSearchEngine.php index ef4e0dc6e8..48dc7053cb 100644 --- a/src/applications/harbormaster/query/HarbormasterBuildableSearchEngine.php +++ b/src/applications/harbormaster/query/HarbormasterBuildableSearchEngine.php @@ -1,221 +1,221 @@ readPHIDsFromRequest( $request, 'revisions', array( DifferentialRevisionPHIDType::TYPECONST, )); $repositories = $this->readPHIDsFromRequest( $request, 'repositories', array( PhabricatorRepositoryRepositoryPHIDType::TYPECONST, )); $container_phids = array_merge($revisions, $repositories); $saved->setParameter('containerPHIDs', $container_phids); $commits = $this->readPHIDsFromRequest( $request, 'commits', array( PhabricatorRepositoryCommitPHIDType::TYPECONST, )); $diffs = $this->readListFromRequest($request, 'diffs'); if ($diffs) { $diffs = id(new DifferentialDiffQuery()) ->setViewer($this->requireViewer()) ->withIDs($diffs) ->execute(); $diffs = mpull($diffs, 'getPHID', 'getPHID'); } $buildable_phids = array_merge($commits, $diffs); $saved->setParameter('buildablePHIDs', $buildable_phids); $saved->setParameter( 'manual', $this->readBoolFromRequest($request, 'manual')); return $saved; } public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { $query = id(new HarbormasterBuildableQuery()) ->needContainerHandles(true) ->needBuildableHandles(true); $container_phids = $saved->getParameter('containerPHIDs', array()); if ($container_phids) { $query->withContainerPHIDs($container_phids); } $buildable_phids = $saved->getParameter('buildablePHIDs', array()); if ($buildable_phids) { $query->withBuildablePHIDs($buildable_phids); } $manual = $saved->getParameter('manual'); if ($manual !== null) { $query->withManualBuildables($manual); } return $query; } public function buildSearchForm( AphrontFormView $form, PhabricatorSavedQuery $saved_query) { $container_phids = $saved_query->getParameter('containerPHIDs', array()); $buildable_phids = $saved_query->getParameter('buildablePHIDs', array()); $all_phids = array_merge($container_phids, $buildable_phids); $revision_names = array(); $diff_names = array(); $repository_names = array(); $commit_names = array(); if ($all_phids) { $objects = id(new PhabricatorObjectQuery()) ->setViewer($this->requireViewer()) ->withPHIDs($all_phids) ->execute(); foreach ($all_phids as $phid) { $object = idx($objects, $phid); if (!$object) { continue; } if ($object instanceof DifferentialRevision) { $revision_names[] = 'D'.$object->getID(); } else if ($object instanceof DifferentialDiff) { $diff_names[] = $object->getID(); } else if ($object instanceof PhabricatorRepository) { $repository_names[] = 'r'.$object->getCallsign(); } else if ($object instanceof PhabricatorRepositoryCommit) { $repository = $object->getRepository(); $commit_names[] = $repository->formatCommitName( $object->getCommitIdentifier()); } } } $form ->appendChild( id(new AphrontFormTextControl()) ->setLabel(pht('Differential Revisions')) ->setName('revisions') ->setValue(implode(', ', $revision_names))) ->appendChild( id(new AphrontFormTextControl()) ->setLabel(pht('Differential Diffs')) ->setName('diffs') ->setValue(implode(', ', $diff_names))) ->appendChild( id(new AphrontFormTextControl()) ->setLabel(pht('Repositories')) ->setName('repositories') ->setValue(implode(', ', $repository_names))) ->appendChild( id(new AphrontFormTextControl()) ->setLabel(pht('Commits')) ->setName('commits') ->setValue(implode(', ', $commit_names))) ->appendChild( id(new AphrontFormSelectControl()) ->setLabel(pht('Origin')) ->setName('manual') ->setValue($this->getBoolFromQuery($saved_query, 'manual')) ->setOptions( array( '' => pht('(All Origins)'), 'true' => pht('Manual Buildables'), 'false' => pht('Automatic Buildables'), ))); } protected function getURI($path) { return '/harbormaster/'.$path; } - public function getBuiltinQueryNames() { + protected function getBuiltinQueryNames() { return array( 'all' => pht('All Buildables'), ); } public function buildSavedQueryFromBuiltin($query_key) { $query = $this->newSavedQuery(); $query->setQueryKey($query_key); switch ($query_key) { case 'all': return $query; } return parent::buildSavedQueryFromBuiltin($query_key); } protected function renderResultList( array $buildables, PhabricatorSavedQuery $query, array $handles) { assert_instances_of($buildables, 'HarbormasterBuildable'); $viewer = $this->requireViewer(); $list = new PHUIObjectItemListView(); foreach ($buildables as $buildable) { $id = $buildable->getID(); $item = id(new PHUIObjectItemView()) ->setHeader(pht('Buildable %d', $buildable->getID())); if ($buildable->getContainerHandle() !== null) { $item->addAttribute($buildable->getContainerHandle()->getName()); } if ($buildable->getBuildableHandle() !== null) { $item->addAttribute($buildable->getBuildableHandle()->getFullName()); } if ($id) { $item->setHref("/B{$id}"); } if ($buildable->getIsManualBuildable()) { $item->addIcon('fa-wrench grey', pht('Manual')); } $item->setBarColor(HarbormasterBuildable::getBuildableStatusColor( $buildable->getBuildableStatus())); $item->addByline(HarbormasterBuildable::getBuildableStatusName( $buildable->getBuildableStatus())); $list->addItem($item); } return $list; } } diff --git a/src/applications/herald/query/HeraldRuleSearchEngine.php b/src/applications/herald/query/HeraldRuleSearchEngine.php index fe12ba7187..1d8bfdda6b 100644 --- a/src/applications/herald/query/HeraldRuleSearchEngine.php +++ b/src/applications/herald/query/HeraldRuleSearchEngine.php @@ -1,218 +1,218 @@ setParameter( 'authorPHIDs', $this->readUsersFromRequest($request, 'authors')); $saved->setParameter('contentType', $request->getStr('contentType')); $saved->setParameter('ruleType', $request->getStr('ruleType')); $saved->setParameter( 'disabled', $this->readBoolFromRequest($request, 'disabled')); return $saved; } public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { $query = id(new HeraldRuleQuery()); $author_phids = $saved->getParameter('authorPHIDs'); if ($author_phids) { $query->withAuthorPHIDs($author_phids); } $content_type = $saved->getParameter('contentType'); $content_type = idx($this->getContentTypeValues(), $content_type); if ($content_type) { $query->withContentTypes(array($content_type)); } $rule_type = $saved->getParameter('ruleType'); $rule_type = idx($this->getRuleTypeValues(), $rule_type); if ($rule_type) { $query->withRuleTypes(array($rule_type)); } $disabled = $saved->getParameter('disabled'); if ($disabled !== null) { $query->withDisabled($disabled); } return $query; } public function buildSearchForm( AphrontFormView $form, PhabricatorSavedQuery $saved_query) { $phids = $saved_query->getParameter('authorPHIDs', array()); $author_handles = id(new PhabricatorHandleQuery()) ->setViewer($this->requireViewer()) ->withPHIDs($phids) ->execute(); $content_type = $saved_query->getParameter('contentType'); $rule_type = $saved_query->getParameter('ruleType'); $form ->appendChild( id(new AphrontFormTokenizerControl()) ->setDatasource(new PhabricatorPeopleDatasource()) ->setName('authors') ->setLabel(pht('Authors')) ->setValue($author_handles)) ->appendChild( id(new AphrontFormSelectControl()) ->setName('contentType') ->setLabel(pht('Content Type')) ->setValue($content_type) ->setOptions($this->getContentTypeOptions())) ->appendChild( id(new AphrontFormSelectControl()) ->setName('ruleType') ->setLabel(pht('Rule Type')) ->setValue($rule_type) ->setOptions($this->getRuleTypeOptions())) ->appendChild( id(new AphrontFormSelectControl()) ->setName('disabled') ->setLabel(pht('Rule Status')) ->setValue($this->getBoolFromQuery($saved_query, 'disabled')) ->setOptions( array( '' => pht('Show Enabled and Disabled Rules'), 'false' => pht('Show Only Enabled Rules'), 'true' => pht('Show Only Disabled Rules'), ))); } protected function getURI($path) { return '/herald/'.$path; } - public function getBuiltinQueryNames() { + protected function getBuiltinQueryNames() { $names = array(); if ($this->requireViewer()->isLoggedIn()) { $names['authored'] = pht('Authored'); } $names['active'] = pht('Active'); $names['all'] = pht('All'); return $names; } public function buildSavedQueryFromBuiltin($query_key) { $query = $this->newSavedQuery(); $query->setQueryKey($query_key); $viewer_phid = $this->requireViewer()->getPHID(); switch ($query_key) { case 'all': return $query; case 'active': return $query->setParameter('disabled', false); case 'authored': return $query ->setParameter('authorPHIDs', array($viewer_phid)) ->setParameter('disabled', false); } return parent::buildSavedQueryFromBuiltin($query_key); } private function getContentTypeOptions() { return array( '' => pht('(All Content Types)'), ) + HeraldAdapter::getEnabledAdapterMap($this->requireViewer()); } private function getContentTypeValues() { return array_fuse( array_keys( HeraldAdapter::getEnabledAdapterMap($this->requireViewer()))); } private function getRuleTypeOptions() { return array( '' => pht('(All Rule Types)'), ) + HeraldRuleTypeConfig::getRuleTypeMap(); } private function getRuleTypeValues() { return array_fuse(array_keys(HeraldRuleTypeConfig::getRuleTypeMap())); } protected function getRequiredHandlePHIDsForResultList( array $rules, PhabricatorSavedQuery $query) { return mpull($rules, 'getAuthorPHID'); } protected function renderResultList( array $rules, PhabricatorSavedQuery $query, array $handles) { assert_instances_of($rules, 'HeraldRule'); $viewer = $this->requireViewer(); $content_type_map = HeraldAdapter::getEnabledAdapterMap($viewer); $list = id(new PHUIObjectItemListView()) ->setUser($viewer); foreach ($rules as $rule) { $id = $rule->getID(); $item = id(new PHUIObjectItemView()) ->setObjectName("H{$id}") ->setHeader($rule->getName()) ->setHref($this->getApplicationURI("rule/{$id}/")); if ($rule->isPersonalRule()) { $item->addIcon('fa-user', pht('Personal Rule')); $item->addByline( pht( 'Authored by %s', $handles[$rule->getAuthorPHID()]->renderLink())); } else { $item->addIcon('fa-globe', pht('Global Rule')); } if ($rule->getIsDisabled()) { $item->setDisabled(true); $item->addIcon('fa-lock grey', pht('Disabled')); } $item->addAction( id(new PHUIListItemView()) ->setHref($this->getApplicationURI("history/{$id}/")) ->setIcon('fa-file-text-o') ->setName(pht('Edit Log'))); $content_type_name = idx($content_type_map, $rule->getContentType()); $item->addAttribute(pht('Affects: %s', $content_type_name)); $list->addItem($item); } return $list; } } diff --git a/src/applications/herald/query/HeraldTranscriptSearchEngine.php b/src/applications/herald/query/HeraldTranscriptSearchEngine.php index 8074b3d613..9696a84391 100644 --- a/src/applications/herald/query/HeraldTranscriptSearchEngine.php +++ b/src/applications/herald/query/HeraldTranscriptSearchEngine.php @@ -1,139 +1,139 @@ getStrList('objectMonograms'); $saved->setParameter('objectMonograms', $object_monograms); $ids = $request->getStrList('ids'); foreach ($ids as $key => $id) { if (!$id || !is_numeric($id)) { unset($ids[$key]); } else { $ids[$key] = $id; } } $saved->setParameter('ids', $ids); return $saved; } public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { $query = id(new HeraldTranscriptQuery()); $object_monograms = $saved->getParameter('objectMonograms'); if ($object_monograms) { $objects = id(new PhabricatorObjectQuery()) ->setViewer($this->requireViewer()) ->withNames($object_monograms) ->execute(); $query->withObjectPHIDs(mpull($objects, 'getPHID')); } $ids = $saved->getParameter('ids'); if ($ids) { $query->withIDs($ids); } return $query; } public function buildSearchForm( AphrontFormView $form, PhabricatorSavedQuery $saved) { $object_monograms = $saved->getParameter('objectMonograms', array()); $ids = $saved->getParameter('ids', array()); $form ->appendChild( id(new AphrontFormTextControl()) ->setName('objectMonograms') ->setLabel(pht('Object Monograms')) ->setValue(implode(', ', $object_monograms))) ->appendChild( id(new AphrontFormTextControl()) ->setName('ids') ->setLabel(pht('Transcript IDs')) ->setValue(implode(', ', $ids))); } protected function getURI($path) { return '/herald/transcript/'.$path; } - public function getBuiltinQueryNames() { + protected function getBuiltinQueryNames() { return array( 'all' => pht('All'), ); } public function buildSavedQueryFromBuiltin($query_key) { $query = $this->newSavedQuery(); $query->setQueryKey($query_key); $viewer_phid = $this->requireViewer()->getPHID(); switch ($query_key) { case 'all': return $query; } return parent::buildSavedQueryFromBuiltin($query_key); } protected function getRequiredHandlePHIDsForResultList( array $transcripts, PhabricatorSavedQuery $query) { return mpull($transcripts, 'getObjectPHID'); } protected function renderResultList( array $transcripts, PhabricatorSavedQuery $query, array $handles) { assert_instances_of($transcripts, 'HeraldTranscript'); $viewer = $this->requireViewer(); $list = new PHUIObjectItemListView(); foreach ($transcripts as $xscript) { $view_href = phutil_tag( 'a', array( 'href' => '/herald/transcript/'.$xscript->getID().'/', ), pht('View Full Transcript')); $item = new PHUIObjectItemView(); $item->setObjectName($xscript->getID()); $item->setHeader($view_href); if ($xscript->getDryRun()) { $item->addAttribute(pht('Dry Run')); } $item->addAttribute($handles[$xscript->getObjectPHID()]->renderLink()); $item->addAttribute( number_format((int)(1000 * $xscript->getDuration())).' ms'); $item->addIcon( 'none', phabricator_datetime($xscript->getTime(), $viewer)); $list->addItem($item); } return $list; } } diff --git a/src/applications/legalpad/query/LegalpadDocumentSearchEngine.php b/src/applications/legalpad/query/LegalpadDocumentSearchEngine.php index d65327a903..65400d765c 100644 --- a/src/applications/legalpad/query/LegalpadDocumentSearchEngine.php +++ b/src/applications/legalpad/query/LegalpadDocumentSearchEngine.php @@ -1,214 +1,214 @@ setParameter( 'creatorPHIDs', $this->readUsersFromRequest($request, 'creators')); $saved->setParameter( 'contributorPHIDs', $this->readUsersFromRequest($request, 'contributors')); $saved->setParameter( 'withViewerSignature', $request->getBool('withViewerSignature')); $saved->setParameter('createdStart', $request->getStr('createdStart')); $saved->setParameter('createdEnd', $request->getStr('createdEnd')); return $saved; } public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { $query = id(new LegalpadDocumentQuery()) ->needViewerSignatures(true); $creator_phids = $saved->getParameter('creatorPHIDs', array()); if ($creator_phids) { $query->withCreatorPHIDs($creator_phids); } $contributor_phids = $saved->getParameter('contributorPHIDs', array()); if ($contributor_phids) { $query->withContributorPHIDs($contributor_phids); } if ($saved->getParameter('withViewerSignature')) { $viewer_phid = $this->requireViewer()->getPHID(); if ($viewer_phid) { $query->withSignerPHIDs(array($viewer_phid)); } } $start = $this->parseDateTime($saved->getParameter('createdStart')); $end = $this->parseDateTime($saved->getParameter('createdEnd')); if ($start) { $query->withDateCreatedAfter($start); } if ($end) { $query->withDateCreatedBefore($end); } return $query; } public function buildSearchForm( AphrontFormView $form, PhabricatorSavedQuery $saved_query) { $creator_phids = $saved_query->getParameter('creatorPHIDs', array()); $contributor_phids = $saved_query->getParameter( 'contributorPHIDs', array()); $phids = array_merge($creator_phids, $contributor_phids); $handles = id(new PhabricatorHandleQuery()) ->setViewer($this->requireViewer()) ->withPHIDs($phids) ->execute(); $viewer_signature = $saved_query->getParameter('withViewerSignature'); if (!$this->requireViewer()->getPHID()) { $viewer_signature = false; } $form ->appendChild( id(new AphrontFormCheckboxControl()) ->addCheckbox( 'withViewerSignature', 1, pht('Show only documents I have signed.'), $viewer_signature) ->setDisabled(!$this->requireViewer()->getPHID())) ->appendChild( id(new AphrontFormTokenizerControl()) ->setDatasource(new PhabricatorPeopleDatasource()) ->setName('creators') ->setLabel(pht('Creators')) ->setValue(array_select_keys($handles, $creator_phids))) ->appendChild( id(new AphrontFormTokenizerControl()) ->setDatasource(new PhabricatorPeopleDatasource()) ->setName('contributors') ->setLabel(pht('Contributors')) ->setValue(array_select_keys($handles, $contributor_phids))); $this->buildDateRange( $form, $saved_query, 'createdStart', pht('Created After'), 'createdEnd', pht('Created Before')); } protected function getURI($path) { return '/legalpad/'.$path; } - public function getBuiltinQueryNames() { + protected function getBuiltinQueryNames() { $names = array(); if ($this->requireViewer()->isLoggedIn()) { $names['signed'] = pht('Signed Documents'); } $names['all'] = pht('All Documents'); return $names; } public function buildSavedQueryFromBuiltin($query_key) { $query = $this->newSavedQuery(); $query->setQueryKey($query_key); switch ($query_key) { case 'signed': return $query ->setParameter('withViewerSignature', true); case 'all': return $query; } return parent::buildSavedQueryFromBuiltin($query_key); } protected function getRequiredHandlePHIDsForResultList( array $documents, PhabricatorSavedQuery $query) { return array(); } protected function renderResultList( array $documents, PhabricatorSavedQuery $query, array $handles) { assert_instances_of($documents, 'LegalpadDocument'); $viewer = $this->requireViewer(); $list = new PHUIObjectItemListView(); $list->setUser($viewer); foreach ($documents as $document) { $last_updated = phabricator_date($document->getDateModified(), $viewer); $title = $document->getTitle(); $type_name = $document->getSignatureTypeName(); $type_icon = $document->getSignatureTypeIcon(); $item = id(new PHUIObjectItemView()) ->setObjectName($document->getMonogram()) ->setHeader($title) ->setHref('/'.$document->getMonogram()) ->setObject($document) ->addIcon($type_icon, $type_name) ->addIcon( 'fa-pencil grey', pht('Version %d (%s)', $document->getVersions(), $last_updated)); if ($viewer->getPHID()) { $signature = $document->getUserSignature($viewer->getPHID()); } else { $signature = null; } if ($signature) { $item->addAttribute( array( id(new PHUIIconView())->setIconFont('fa-check-square-o', 'green'), ' ', pht( 'Signed on %s', phabricator_date($signature->getDateCreated(), $viewer)), )); } else { $item->addAttribute( array( id(new PHUIIconView())->setIconFont('fa-square-o', 'grey'), ' ', pht('Not Signed'), )); } $list->addItem($item); } return $list; } } diff --git a/src/applications/legalpad/query/LegalpadDocumentSignatureSearchEngine.php b/src/applications/legalpad/query/LegalpadDocumentSignatureSearchEngine.php index eb978e402a..bed390bdb3 100644 --- a/src/applications/legalpad/query/LegalpadDocumentSignatureSearchEngine.php +++ b/src/applications/legalpad/query/LegalpadDocumentSignatureSearchEngine.php @@ -1,327 +1,327 @@ document = $document; return $this; } public function buildSavedQueryFromRequest(AphrontRequest $request) { $saved = new PhabricatorSavedQuery(); $saved->setParameter( 'signerPHIDs', $this->readUsersFromRequest($request, 'signers')); $saved->setParameter( 'documentPHIDs', $this->readPHIDsFromRequest( $request, 'documents', array( PhabricatorLegalpadDocumentPHIDType::TYPECONST, ))); $saved->setParameter('nameContains', $request->getStr('nameContains')); $saved->setParameter('emailContains', $request->getStr('emailContains')); return $saved; } public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { $query = id(new LegalpadDocumentSignatureQuery()); $signer_phids = $saved->getParameter('signerPHIDs', array()); if ($signer_phids) { $query->withSignerPHIDs($signer_phids); } if ($this->document) { $query->withDocumentPHIDs(array($this->document->getPHID())); } else { $document_phids = $saved->getParameter('documentPHIDs', array()); if ($document_phids) { $query->withDocumentPHIDs($document_phids); } } $name_contains = $saved->getParameter('nameContains'); if (strlen($name_contains)) { $query->withNameContains($name_contains); } $email_contains = $saved->getParameter('emailContains'); if (strlen($email_contains)) { $query->withEmailContains($email_contains); } return $query; } public function buildSearchForm( AphrontFormView $form, PhabricatorSavedQuery $saved_query) { $document_phids = $saved_query->getParameter('documentPHIDs', array()); $signer_phids = $saved_query->getParameter('signerPHIDs', array()); $phids = array_merge($document_phids, $signer_phids); $handles = id(new PhabricatorHandleQuery()) ->setViewer($this->requireViewer()) ->withPHIDs($phids) ->execute(); if (!$this->document) { $form ->appendChild( id(new AphrontFormTokenizerControl()) ->setDatasource(new LegalpadDocumentDatasource()) ->setName('documents') ->setLabel(pht('Documents')) ->setValue(array_select_keys($handles, $document_phids))); } $name_contains = $saved_query->getParameter('nameContains', ''); $email_contains = $saved_query->getParameter('emailContains', ''); $form ->appendChild( id(new AphrontFormTokenizerControl()) ->setDatasource(new PhabricatorPeopleDatasource()) ->setName('signers') ->setLabel(pht('Signers')) ->setValue(array_select_keys($handles, $signer_phids))) ->appendChild( id(new AphrontFormTextControl()) ->setLabel(pht('Name Contains')) ->setName('nameContains') ->setValue($name_contains)) ->appendChild( id(new AphrontFormTextControl()) ->setLabel(pht('Email Contains')) ->setName('emailContains') ->setValue($email_contains)); } protected function getURI($path) { if ($this->document) { return '/legalpad/signatures/'.$this->document->getID().'/'.$path; } else { return '/legalpad/signatures/'.$path; } } - public function getBuiltinQueryNames() { + protected function getBuiltinQueryNames() { $names = array( 'all' => pht('All Signatures'), ); return $names; } public function buildSavedQueryFromBuiltin($query_key) { $query = $this->newSavedQuery(); $query->setQueryKey($query_key); switch ($query_key) { case 'all': return $query; } return parent::buildSavedQueryFromBuiltin($query_key); } protected function getRequiredHandlePHIDsForResultList( array $signatures, PhabricatorSavedQuery $query) { return array_merge( mpull($signatures, 'getSignerPHID'), mpull($signatures, 'getDocumentPHID')); } protected function renderResultList( array $signatures, PhabricatorSavedQuery $query, array $handles) { assert_instances_of($signatures, 'LegalpadDocumentSignature'); $viewer = $this->requireViewer(); Javelin::initBehavior('phabricator-tooltips'); $sig_good = $this->renderIcon( 'fa-check', null, pht('Verified, Current')); $sig_corp = $this->renderIcon( 'fa-building-o', null, pht('Verified, Corporate')); $sig_old = $this->renderIcon( 'fa-clock-o', 'orange', pht('Signed Older Version')); $sig_unverified = $this->renderIcon( 'fa-envelope', 'red', pht('Unverified Email')); $sig_exemption = $this->renderIcon( 'fa-asterisk', 'indigo', pht('Exemption')); id(new PHUIIconView()) ->setIconFont('fa-envelope', 'red') ->addSigil('has-tooltip') ->setMetadata(array('tip' => pht('Unverified Email'))); $type_corporate = LegalpadDocument::SIGNATURE_TYPE_CORPORATION; $rows = array(); foreach ($signatures as $signature) { $name = $signature->getSignerName(); $email = $signature->getSignerEmail(); $document = $signature->getDocument(); if ($signature->getIsExemption()) { $sig_icon = $sig_exemption; } else if (!$signature->isVerified()) { $sig_icon = $sig_unverified; } else if ($signature->getDocumentVersion() != $document->getVersions()) { $sig_icon = $sig_old; } else if ($signature->getSignatureType() == $type_corporate) { $sig_icon = $sig_corp; } else { $sig_icon = $sig_good; } $signature_href = $this->getApplicationURI( 'signature/'.$signature->getID().'/'); $sig_icon = javelin_tag( 'a', array( 'href' => $signature_href, 'sigil' => 'workflow', ), $sig_icon); $signer_phid = $signature->getSignerPHID(); $rows[] = array( $sig_icon, $handles[$document->getPHID()]->renderLink(), $signer_phid ? $handles[$signer_phid]->renderLink() : null, $name, phutil_tag( 'a', array( 'href' => 'mailto:'.$email, ), $email), phabricator_datetime($signature->getDateCreated(), $viewer), ); } $table = id(new AphrontTableView($rows)) ->setNoDataString(pht('No signatures match the query.')) ->setHeaders( array( '', pht('Document'), pht('Account'), pht('Name'), pht('Email'), pht('Signed'), )) ->setColumnVisibility( array( true, // Only show the "Document" column if we aren't scoped to a // particular document. !$this->document, )) ->setColumnClasses( array( '', '', '', '', 'wide', 'right', )); $header = id(new PHUIHeaderView()) ->setHeader(pht('Signatures')); if ($this->document) { $document_id = $this->document->getID(); $header->addActionLink( id(new PHUIButtonView()) ->setText(pht('Add Signature Exemption')) ->setTag('a') ->setHref($this->getApplicationURI('addsignature/'.$document_id.'/')) ->setWorkflow(true) ->setIcon(id(new PHUIIconView())->setIconFont('fa-pencil'))); } $box = id(new PHUIObjectBoxView()) ->setHeader($header) ->appendChild($table); if (!$this->document) { $policy_notice = id(new AphrontErrorView()) ->setSeverity(AphrontErrorView::SEVERITY_NOTICE) ->setErrors( array( pht( 'NOTE: You can only see your own signatures and signatures on '. 'documents you have permission to edit.'), )); $box->setErrorView($policy_notice); } return $box; } private function renderIcon($icon, $color, $title) { Javelin::initBehavior('phabricator-tooltips'); return array( id(new PHUIIconView()) ->setIconFont($icon, $color) ->addSigil('has-tooltip') ->setMetadata(array('tip' => $title)), javelin_tag( 'span', array( 'aural' => true, ), $title), ); } } diff --git a/src/applications/macro/query/PhabricatorMacroSearchEngine.php b/src/applications/macro/query/PhabricatorMacroSearchEngine.php index 45390b13b1..934d98bb01 100644 --- a/src/applications/macro/query/PhabricatorMacroSearchEngine.php +++ b/src/applications/macro/query/PhabricatorMacroSearchEngine.php @@ -1,221 +1,221 @@ setParameter( 'authorPHIDs', $this->readUsersFromRequest($request, 'authors')); $saved->setParameter('status', $request->getStr('status')); $saved->setParameter('names', $request->getStrList('names')); $saved->setParameter('nameLike', $request->getStr('nameLike')); $saved->setParameter('createdStart', $request->getStr('createdStart')); $saved->setParameter('createdEnd', $request->getStr('createdEnd')); $saved->setParameter('flagColor', $request->getStr('flagColor', '-1')); return $saved; } public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { $query = id(new PhabricatorMacroQuery()) ->needFiles(true) ->withIDs($saved->getParameter('ids', array())) ->withPHIDs($saved->getParameter('phids', array())) ->withAuthorPHIDs($saved->getParameter('authorPHIDs', array())); $status = $saved->getParameter('status'); $options = PhabricatorMacroQuery::getStatusOptions(); if (empty($options[$status])) { $status = head_key($options); } $query->withStatus($status); $names = $saved->getParameter('names', array()); if ($names) { $query->withNames($names); } $like = $saved->getParameter('nameLike'); if (strlen($like)) { $query->withNameLike($like); } $start = $this->parseDateTime($saved->getParameter('createdStart')); $end = $this->parseDateTime($saved->getParameter('createdEnd')); if ($start) { $query->withDateCreatedAfter($start); } if ($end) { $query->withDateCreatedBefore($end); } $color = $saved->getParameter('flagColor'); if (strlen($color)) { $query->withFlagColor($color); } return $query; } public function buildSearchForm( AphrontFormView $form, PhabricatorSavedQuery $saved_query) { $phids = $saved_query->getParameter('authorPHIDs', array()); $author_handles = id(new PhabricatorHandleQuery()) ->setViewer($this->requireViewer()) ->withPHIDs($phids) ->execute(); $status = $saved_query->getParameter('status'); $names = implode(', ', $saved_query->getParameter('names', array())); $like = $saved_query->getParameter('nameLike'); $color = $saved_query->getParameter('flagColor', '-1'); $form ->appendChild( id(new AphrontFormSelectControl()) ->setName('status') ->setLabel(pht('Status')) ->setOptions(PhabricatorMacroQuery::getStatusOptions()) ->setValue($status)) ->appendChild( id(new AphrontFormTokenizerControl()) ->setDatasource(new PhabricatorPeopleDatasource()) ->setName('authors') ->setLabel(pht('Authors')) ->setValue($author_handles)) ->appendChild( id(new AphrontFormTextControl()) ->setName('nameLike') ->setLabel(pht('Name Contains')) ->setValue($like)) ->appendChild( id(new AphrontFormTextControl()) ->setName('names') ->setLabel(pht('Exact Names')) ->setValue($names)) ->appendChild( id(new AphrontFormSelectControl()) ->setName('flagColor') ->setLabel(pht('Marked with Flag')) ->setOptions(PhabricatorMacroQuery::getFlagColorsOptions()) ->setValue($color)); $this->buildDateRange( $form, $saved_query, 'createdStart', pht('Created After'), 'createdEnd', pht('Created Before')); } protected function getURI($path) { return '/macro/'.$path; } - public function getBuiltinQueryNames() { + protected function getBuiltinQueryNames() { $names = array( 'active' => pht('Active'), 'all' => pht('All'), ); if ($this->requireViewer()->isLoggedIn()) { $names['authored'] = pht('Authored'); } return $names; } public function buildSavedQueryFromBuiltin($query_key) { $query = $this->newSavedQuery(); $query->setQueryKey($query_key); switch ($query_key) { case 'active': return $query; case 'all': return $query->setParameter( 'status', PhabricatorMacroQuery::STATUS_ANY); case 'authored': return $query->setParameter( 'authorPHIDs', array($this->requireViewer()->getPHID())); } return parent::buildSavedQueryFromBuiltin($query_key); } protected function getRequiredHandlePHIDsForResultList( array $macros, PhabricatorSavedQuery $query) { return mpull($macros, 'getAuthorPHID'); } protected function renderResultList( array $macros, PhabricatorSavedQuery $query, array $handles) { assert_instances_of($macros, 'PhabricatorFileImageMacro'); $viewer = $this->requireViewer(); $pinboard = new PHUIPinboardView(); foreach ($macros as $macro) { $file = $macro->getFile(); $item = new PHUIPinboardItemView(); if ($file) { $item->setImageURI($file->getThumb280x210URI()); $item->setImageSize(280, 210); } if ($macro->getDateCreated()) { $datetime = phabricator_date($macro->getDateCreated(), $viewer); $item->appendChild( phutil_tag( 'div', array(), pht('Created on %s', $datetime))); } else { // Very old macros don't have a creation date. Rendering something // keeps all the pins at the same height and avoids flow issues. $item->appendChild( phutil_tag( 'div', array(), pht('Created in ages long past'))); } if ($macro->getAuthorPHID()) { $author_handle = $handles[$macro->getAuthorPHID()]; $item->appendChild( pht('Created by %s', $author_handle->renderLink())); } $item->setURI($this->getApplicationURI('/view/'.$macro->getID().'/')); $item->setDisabled($macro->getisDisabled()); $item->setHeader($macro->getName()); $pinboard->addItem($item); } return $pinboard; } } diff --git a/src/applications/mailinglists/query/PhabricatorMailingListSearchEngine.php b/src/applications/mailinglists/query/PhabricatorMailingListSearchEngine.php index 63f71a854d..54fe898546 100644 --- a/src/applications/mailinglists/query/PhabricatorMailingListSearchEngine.php +++ b/src/applications/mailinglists/query/PhabricatorMailingListSearchEngine.php @@ -1,84 +1,84 @@ appendChild( id(new AphrontFormMarkupControl()) ->setValue(pht('No query filters are available for mailing lists.'))); } protected function getURI($path) { return '/mailinglists/'.$path; } - public function getBuiltinQueryNames() { + protected function getBuiltinQueryNames() { return array( 'all' => pht('All Lists'), ); } public function buildSavedQueryFromBuiltin($query_key) { $query = $this->newSavedQuery(); $query->setQueryKey($query_key); switch ($query_key) { case 'all': return $query; } return parent::buildSavedQueryFromBuiltin($query_key); } protected function renderResultList( array $lists, PhabricatorSavedQuery $query, array $handles) { assert_instances_of($lists, 'PhabricatorMetaMTAMailingList'); $view = id(new PHUIObjectItemListView()); foreach ($lists as $list) { $item = new PHUIObjectItemView(); $item->setHeader($list->getName()); $item->setHref($list->getURI()); $item->addAttribute($list->getEmail()); $item->addAction( id(new PHUIListItemView()) ->setIcon('fa-pencil') ->setHref($this->getApplicationURI('/edit/'.$list->getID().'/'))); $view->addItem($item); } return $view; } } diff --git a/src/applications/maniphest/query/ManiphestTaskSearchEngine.php b/src/applications/maniphest/query/ManiphestTaskSearchEngine.php index 7af51b74f5..b500b995e4 100644 --- a/src/applications/maniphest/query/ManiphestTaskSearchEngine.php +++ b/src/applications/maniphest/query/ManiphestTaskSearchEngine.php @@ -1,561 +1,561 @@ isBoardView = $is_board_view; return $this; } public function getIsBoardView() { return $this->isBoardView; } public function setBaseURI($base_uri) { $this->baseURI = $base_uri; return $this; } public function getBaseURI() { return $this->baseURI; } public function setShowBatchControls($show_batch_controls) { $this->showBatchControls = $show_batch_controls; return $this; } public function getResultTypeDescription() { return pht('Tasks'); } - public function getApplicationClassName() { + protected function getApplicationClassName() { return 'PhabricatorManiphestApplication'; } public function getCustomFieldObject() { return new ManiphestTask(); } public function buildSavedQueryFromRequest(AphrontRequest $request) { $saved = new PhabricatorSavedQuery(); $saved->setParameter( 'assignedPHIDs', $this->readUsersFromRequest($request, 'assigned')); $saved->setParameter('withUnassigned', $request->getBool('withUnassigned')); $saved->setParameter( 'authorPHIDs', $this->readUsersFromRequest($request, 'authors')); $saved->setParameter( 'subscriberPHIDs', $this->readPHIDsFromRequest($request, 'subscribers')); $saved->setParameter( 'statuses', $this->readListFromRequest($request, 'statuses')); $saved->setParameter( 'priorities', $this->readListFromRequest($request, 'priorities')); $saved->setParameter('group', $request->getStr('group')); $saved->setParameter('order', $request->getStr('order')); $ids = $request->getStrList('ids'); foreach ($ids as $key => $id) { $id = trim($id, ' Tt'); if (!$id || !is_numeric($id)) { unset($ids[$key]); } else { $ids[$key] = $id; } } $saved->setParameter('ids', $ids); $saved->setParameter('fulltext', $request->getStr('fulltext')); $saved->setParameter( 'allProjectPHIDs', $this->readPHIDsFromRequest($request, 'allProjects')); $saved->setParameter( 'withNoProject', $request->getBool('withNoProject')); $saved->setParameter( 'anyProjectPHIDs', $this->readPHIDsFromRequest($request, 'anyProjects')); $saved->setParameter( 'excludeProjectPHIDs', $this->readPHIDsFromRequest($request, 'excludeProjects')); $saved->setParameter( 'userProjectPHIDs', $this->readUsersFromRequest($request, 'userProjects')); $saved->setParameter('createdStart', $request->getStr('createdStart')); $saved->setParameter('createdEnd', $request->getStr('createdEnd')); $saved->setParameter('modifiedStart', $request->getStr('modifiedStart')); $saved->setParameter('modifiedEnd', $request->getStr('modifiedEnd')); $limit = $request->getInt('limit'); if ($limit > 0) { $saved->setParameter('limit', $limit); } $this->readCustomFieldsFromRequest($request, $saved); return $saved; } public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { $query = id(new ManiphestTaskQuery()) ->needProjectPHIDs(true); $author_phids = $saved->getParameter('authorPHIDs'); if ($author_phids) { $query->withAuthors($author_phids); } $subscriber_phids = $saved->getParameter('subscriberPHIDs'); if ($subscriber_phids) { $query->withSubscribers($subscriber_phids); } $with_unassigned = $saved->getParameter('withUnassigned'); if ($with_unassigned) { $query->withOwners(array(null)); } else { $assigned_phids = $saved->getParameter('assignedPHIDs', array()); if ($assigned_phids) { $query->withOwners($assigned_phids); } } $statuses = $saved->getParameter('statuses'); if ($statuses) { $query->withStatuses($statuses); } $priorities = $saved->getParameter('priorities'); if ($priorities) { $query->withPriorities($priorities); } $this->applyOrderByToQuery( $query, $this->getOrderValues(), $saved->getParameter('order')); $group = $saved->getParameter('group'); $group = idx($this->getGroupValues(), $group); if ($group) { $query->setGroupBy($group); } else { $query->setGroupBy(head($this->getGroupValues())); } $ids = $saved->getParameter('ids'); if ($ids) { $query->withIDs($ids); } $fulltext = $saved->getParameter('fulltext'); if (strlen($fulltext)) { $query->withFullTextSearch($fulltext); } $with_no_project = $saved->getParameter('withNoProject'); if ($with_no_project) { $query->withAllProjects(array(ManiphestTaskOwner::PROJECT_NO_PROJECT)); } else { $project_phids = $saved->getParameter('allProjectPHIDs'); if ($project_phids) { $query->withAllProjects($project_phids); } } $any_project_phids = $saved->getParameter('anyProjectPHIDs'); if ($any_project_phids) { $query->withAnyProjects($any_project_phids); } $exclude_project_phids = $saved->getParameter('excludeProjectPHIDs'); if ($exclude_project_phids) { $query->withoutProjects($exclude_project_phids); } $user_project_phids = $saved->getParameter('userProjectPHIDs'); if ($user_project_phids) { $query->withAnyUserProjects($user_project_phids); } $start = $this->parseDateTime($saved->getParameter('createdStart')); $end = $this->parseDateTime($saved->getParameter('createdEnd')); if ($start) { $query->withDateCreatedAfter($start); } if ($end) { $query->withDateCreatedBefore($end); } $mod_start = $this->parseDateTime($saved->getParameter('modifiedStart')); $mod_end = $this->parseDateTime($saved->getParameter('modifiedEnd')); if ($mod_start) { $query->withDateModifiedAfter($mod_start); } if ($mod_end) { $query->withDateModifiedBefore($mod_end); } $this->applyCustomFieldsToQuery($query, $saved); return $query; } public function buildSearchForm( AphrontFormView $form, PhabricatorSavedQuery $saved) { $assigned_phids = $saved->getParameter('assignedPHIDs', array()); $author_phids = $saved->getParameter('authorPHIDs', array()); $all_project_phids = $saved->getParameter( 'allProjectPHIDs', array()); $any_project_phids = $saved->getParameter( 'anyProjectPHIDs', array()); $exclude_project_phids = $saved->getParameter( 'excludeProjectPHIDs', array()); $user_project_phids = $saved->getParameter( 'userProjectPHIDs', array()); $subscriber_phids = $saved->getParameter('subscriberPHIDs', array()); $all_phids = array_merge( $assigned_phids, $author_phids, $all_project_phids, $any_project_phids, $exclude_project_phids, $user_project_phids, $subscriber_phids); if ($all_phids) { $handles = id(new PhabricatorHandleQuery()) ->setViewer($this->requireViewer()) ->withPHIDs($all_phids) ->execute(); } else { $handles = array(); } $assigned_handles = array_select_keys($handles, $assigned_phids); $author_handles = array_select_keys($handles, $author_phids); $all_project_handles = array_select_keys($handles, $all_project_phids); $any_project_handles = array_select_keys($handles, $any_project_phids); $exclude_project_handles = array_select_keys( $handles, $exclude_project_phids); $user_project_handles = array_select_keys($handles, $user_project_phids); $subscriber_handles = array_select_keys($handles, $subscriber_phids); $with_unassigned = $saved->getParameter('withUnassigned'); $with_no_projects = $saved->getParameter('withNoProject'); $statuses = $saved->getParameter('statuses', array()); $statuses = array_fuse($statuses); $status_control = id(new AphrontFormCheckboxControl()) ->setLabel(pht('Status')); foreach (ManiphestTaskStatus::getTaskStatusMap() as $status => $name) { $status_control->addCheckbox( 'statuses[]', $status, $name, isset($statuses[$status])); } $priorities = $saved->getParameter('priorities', array()); $priorities = array_fuse($priorities); $priority_control = id(new AphrontFormCheckboxControl()) ->setLabel(pht('Priority')); foreach (ManiphestTaskPriority::getTaskPriorityMap() as $pri => $name) { $priority_control->addCheckbox( 'priorities[]', $pri, $name, isset($priorities[$pri])); } $ids = $saved->getParameter('ids', array()); $builtin_orders = $this->getOrderOptions(); $custom_orders = $this->getCustomFieldOrderOptions(); $all_orders = $builtin_orders + $custom_orders; $form ->appendChild( id(new AphrontFormTokenizerControl()) ->setDatasource(new PhabricatorPeopleDatasource()) ->setName('assigned') ->setLabel(pht('Assigned To')) ->setValue($assigned_handles)) ->appendChild( id(new AphrontFormCheckboxControl()) ->addCheckbox( 'withUnassigned', 1, pht('Show only unassigned tasks.'), $with_unassigned)) ->appendChild( id(new AphrontFormTokenizerControl()) ->setDatasource(new PhabricatorProjectDatasource()) ->setName('allProjects') ->setLabel(pht('In All Projects')) ->setValue($all_project_handles)); if (!$this->getIsBoardView()) { $form ->appendChild( id(new AphrontFormCheckboxControl()) ->addCheckbox( 'withNoProject', 1, pht('Show only tasks with no projects.'), $with_no_projects)); } $form ->appendChild( id(new AphrontFormTokenizerControl()) ->setDatasource(new PhabricatorProjectDatasource()) ->setName('anyProjects') ->setLabel(pht('In Any Project')) ->setValue($any_project_handles)) ->appendChild( id(new AphrontFormTokenizerControl()) ->setDatasource(new PhabricatorProjectDatasource()) ->setName('excludeProjects') ->setLabel(pht('Not In Projects')) ->setValue($exclude_project_handles)) ->appendChild( id(new AphrontFormTokenizerControl()) ->setDatasource(new PhabricatorPeopleDatasource()) ->setName('userProjects') ->setLabel(pht('In Users\' Projects')) ->setValue($user_project_handles)) ->appendChild( id(new AphrontFormTokenizerControl()) ->setDatasource(new PhabricatorPeopleDatasource()) ->setName('authors') ->setLabel(pht('Authors')) ->setValue($author_handles)) ->appendChild( id(new AphrontFormTokenizerControl()) ->setDatasource(new PhabricatorMetaMTAMailableDatasource()) ->setName('subscribers') ->setLabel(pht('Subscribers')) ->setValue($subscriber_handles)) ->appendChild( id(new AphrontFormTextControl()) ->setName('fulltext') ->setLabel(pht('Contains Words')) ->setValue($saved->getParameter('fulltext'))) ->appendChild($status_control) ->appendChild($priority_control); if (!$this->getIsBoardView()) { $form ->appendChild( id(new AphrontFormSelectControl()) ->setName('group') ->setLabel(pht('Group By')) ->setValue($saved->getParameter('group')) ->setOptions($this->getGroupOptions())) ->appendChild( id(new AphrontFormSelectControl()) ->setName('order') ->setLabel(pht('Order By')) ->setValue($saved->getParameter('order')) ->setOptions($all_orders)); } $form ->appendChild( id(new AphrontFormTextControl()) ->setName('ids') ->setLabel(pht('Task IDs')) ->setValue(implode(', ', $ids))); $this->appendCustomFieldsToForm($form, $saved); $this->buildDateRange( $form, $saved, 'createdStart', pht('Created After'), 'createdEnd', pht('Created Before')); $this->buildDateRange( $form, $saved, 'modifiedStart', pht('Updated After'), 'modifiedEnd', pht('Updated Before')); if (!$this->getIsBoardView()) { $form ->appendChild( id(new AphrontFormTextControl()) ->setName('limit') ->setLabel(pht('Page Size')) ->setValue($saved->getParameter('limit', 100))); } } protected function getURI($path) { if ($this->baseURI) { return $this->baseURI.$path; } return '/maniphest/'.$path; } - public function getBuiltinQueryNames() { + protected function getBuiltinQueryNames() { $names = array(); if ($this->requireViewer()->isLoggedIn()) { $names['assigned'] = pht('Assigned'); $names['authored'] = pht('Authored'); $names['subscribed'] = pht('Subscribed'); } $names['open'] = pht('Open Tasks'); $names['all'] = pht('All Tasks'); return $names; } public function buildSavedQueryFromBuiltin($query_key) { $query = $this->newSavedQuery(); $query->setQueryKey($query_key); $viewer_phid = $this->requireViewer()->getPHID(); switch ($query_key) { case 'all': return $query; case 'assigned': return $query ->setParameter('assignedPHIDs', array($viewer_phid)) ->setParameter( 'statuses', ManiphestTaskStatus::getOpenStatusConstants()); case 'subscribed': return $query ->setParameter('subscriberPHIDs', array($viewer_phid)) ->setParameter( 'statuses', ManiphestTaskStatus::getOpenStatusConstants()); case 'open': return $query ->setParameter( 'statuses', ManiphestTaskStatus::getOpenStatusConstants()); case 'authored': return $query ->setParameter('authorPHIDs', array($viewer_phid)) ->setParameter('order', 'created') ->setParameter('group', 'none'); } return parent::buildSavedQueryFromBuiltin($query_key); } private function getOrderOptions() { return array( 'priority' => pht('Priority'), 'updated' => pht('Date Updated'), 'created' => pht('Date Created'), 'title' => pht('Title'), ); } private function getOrderValues() { return array( 'priority' => ManiphestTaskQuery::ORDER_PRIORITY, 'updated' => ManiphestTaskQuery::ORDER_MODIFIED, 'created' => ManiphestTaskQuery::ORDER_CREATED, 'title' => ManiphestTaskQuery::ORDER_TITLE, ); } private function getGroupOptions() { return array( 'priority' => pht('Priority'), 'assigned' => pht('Assigned'), 'status' => pht('Status'), 'project' => pht('Project'), 'none' => pht('None'), ); } private function getGroupValues() { return array( 'priority' => ManiphestTaskQuery::GROUP_PRIORITY, 'assigned' => ManiphestTaskQuery::GROUP_OWNER, 'status' => ManiphestTaskQuery::GROUP_STATUS, 'project' => ManiphestTaskQuery::GROUP_PROJECT, 'none' => ManiphestTaskQuery::GROUP_NONE, ); } protected function renderResultList( array $tasks, PhabricatorSavedQuery $saved, array $handles) { $viewer = $this->requireViewer(); if ($this->isPanelContext()) { $can_edit_priority = false; $can_bulk_edit = false; } else { $can_edit_priority = PhabricatorPolicyFilter::hasCapability( $viewer, $this->getApplication(), ManiphestEditPriorityCapability::CAPABILITY); $can_bulk_edit = PhabricatorPolicyFilter::hasCapability( $viewer, $this->getApplication(), ManiphestBulkEditCapability::CAPABILITY); } return id(new ManiphestTaskResultListView()) ->setUser($viewer) ->setTasks($tasks) ->setSavedQuery($saved) ->setCanEditPriority($can_edit_priority) ->setCanBatchEdit($can_bulk_edit) ->setShowBatchControls($this->showBatchControls); } } diff --git a/src/applications/meta/query/PhabricatorAppSearchEngine.php b/src/applications/meta/query/PhabricatorAppSearchEngine.php index 2d1d7d8525..5a12da2ca1 100644 --- a/src/applications/meta/query/PhabricatorAppSearchEngine.php +++ b/src/applications/meta/query/PhabricatorAppSearchEngine.php @@ -1,256 +1,256 @@ setParameter('name', $request->getStr('name')); $saved->setParameter( 'installed', $this->readBoolFromRequest($request, 'installed')); $saved->setParameter( 'prototypes', $this->readBoolFromRequest($request, 'prototypes')); $saved->setParameter( 'firstParty', $this->readBoolFromRequest($request, 'firstParty')); $saved->setParameter( 'launchable', $this->readBoolFromRequest($request, 'launchable')); return $saved; } public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { $query = id(new PhabricatorApplicationQuery()) ->setOrder(PhabricatorApplicationQuery::ORDER_NAME) ->withUnlisted(false); $name = $saved->getParameter('name'); if (strlen($name)) { $query->withNameContains($name); } $installed = $saved->getParameter('installed'); if ($installed !== null) { $query->withInstalled($installed); } $prototypes = $saved->getParameter('prototypes'); if ($prototypes === null) { // NOTE: This is the old name of the 'prototypes' option, see T6084. $prototypes = $saved->getParameter('beta'); $saved->setParameter('prototypes', $prototypes); } if ($prototypes !== null) { $query->withPrototypes($prototypes); } $first_party = $saved->getParameter('firstParty'); if ($first_party !== null) { $query->withFirstParty($first_party); } $launchable = $saved->getParameter('launchable'); if ($launchable !== null) { $query->withLaunchable($launchable); } return $query; } public function buildSearchForm( AphrontFormView $form, PhabricatorSavedQuery $saved) { $form ->appendChild( id(new AphrontFormTextControl()) ->setLabel(pht('Name Contains')) ->setName('name') ->setValue($saved->getParameter('name'))) ->appendChild( id(new AphrontFormSelectControl()) ->setLabel(pht('Installed')) ->setName('installed') ->setValue($this->getBoolFromQuery($saved, 'installed')) ->setOptions( array( '' => pht('Show All Applications'), 'true' => pht('Show Installed Applications'), 'false' => pht('Show Uninstalled Applications'), ))) ->appendChild( id(new AphrontFormSelectControl()) ->setLabel(pht('Prototypes')) ->setName('prototypes') ->setValue($this->getBoolFromQuery($saved, 'prototypes')) ->setOptions( array( '' => pht('Show All Applications'), 'true' => pht('Show Prototype Applications'), 'false' => pht('Show Released Applications'), ))) ->appendChild( id(new AphrontFormSelectControl()) ->setLabel(pht('Provenance')) ->setName('firstParty') ->setValue($this->getBoolFromQuery($saved, 'firstParty')) ->setOptions( array( '' => pht('Show All Applications'), 'true' => pht('Show First-Party Applications'), 'false' => pht('Show Third-Party Applications'), ))) ->appendChild( id(new AphrontFormSelectControl()) ->setLabel(pht('Launchable')) ->setName('launchable') ->setValue($this->getBoolFromQuery($saved, 'launchable')) ->setOptions( array( '' => pht('Show All Applications'), 'true' => pht('Show Launchable Applications'), 'false' => pht('Show Non-Launchable Applications'), ))); } protected function getURI($path) { return '/applications/'.$path; } - public function getBuiltinQueryNames() { + protected function getBuiltinQueryNames() { return array( 'launcher' => pht('Launcher'), 'all' => pht('All Applications'), ); } public function buildSavedQueryFromBuiltin($query_key) { $query = $this->newSavedQuery(); $query->setQueryKey($query_key); switch ($query_key) { case 'launcher': return $query ->setParameter('installed', true) ->setParameter('launchable', true); case 'all': return $query; } return parent::buildSavedQueryFromBuiltin($query_key); } protected function renderResultList( array $all_applications, PhabricatorSavedQuery $query, array $handle) { assert_instances_of($all_applications, 'PhabricatorApplication'); $all_applications = msort($all_applications, 'getName'); if ($query->getQueryKey() == 'launcher') { $groups = mgroup($all_applications, 'getApplicationGroup'); } else { $groups = array($all_applications); } $group_names = PhabricatorApplication::getApplicationGroups(); $groups = array_select_keys($groups, array_keys($group_names)) + $groups; $results = array(); foreach ($groups as $group => $applications) { if (count($groups) > 1) { $results[] = phutil_tag( 'h1', array( 'class' => 'launcher-header', ), idx($group_names, $group, $group)); } $list = new PHUIObjectItemListView(); $list->addClass('phui-object-item-launcher-list'); foreach ($applications as $application) { $icon = $application->getIconName(); if (!$icon) { $icon = 'application'; } // TODO: This sheet doesn't work the same way other sheets do so it // ends up with the wrong classes if we try to use PHUIIconView. This // is probably all changing in the redesign anyway. $icon_view = javelin_tag( 'span', array( 'class' => 'phui-icon-view '. 'sprite-apps-large apps-'.$icon.'-dark-large', 'aural' => false, ), ''); $description = phutil_tag( 'div', array( 'style' => 'white-space: nowrap; '. 'overflow: hidden; '. 'text-overflow: ellipsis;', ), $application->getShortDescription()); $item = id(new PHUIObjectItemView()) ->setHeader($application->getName()) ->setImageIcon($icon_view) ->addAttribute($description) ->addAction( id(new PHUIListItemView()) ->setName(pht('Help/Options')) ->setIcon('fa-cog') ->setHref('/applications/view/'.get_class($application).'/')); if ($application->getBaseURI() && $application->isInstalled()) { $item->setHref($application->getBaseURI()); } if (!$application->isInstalled()) { $item->addIcon('fa-times', pht('Uninstalled')); } if ($application->isPrototype()) { $item->addIcon('fa-bomb grey', pht('Prototype')); } if (!$application->isFirstParty()) { $item->addIcon('fa-puzzle-piece', pht('Extension')); } $list->addItem($item); } $results[] = $list; } return $results; } } diff --git a/src/applications/notification/query/PhabricatorNotificationSearchEngine.php b/src/applications/notification/query/PhabricatorNotificationSearchEngine.php index bb9dc4e166..aa6d14212e 100644 --- a/src/applications/notification/query/PhabricatorNotificationSearchEngine.php +++ b/src/applications/notification/query/PhabricatorNotificationSearchEngine.php @@ -1,143 +1,143 @@ setParameter( 'unread', $this->readBoolFromRequest($request, 'unread')); return $saved; } public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { $query = id(new PhabricatorNotificationQuery()) ->withUserPHIDs(array($this->requireViewer()->getPHID())); if ($saved->getParameter('unread')) { $query->withUnread(true); } return $query; } public function buildSearchForm( AphrontFormView $form, PhabricatorSavedQuery $saved) { $unread = $saved->getParameter('unread'); $form->appendChild( id(new AphrontFormCheckboxControl()) ->setLabel(pht('Unread')) ->addCheckbox( 'unread', 1, pht('Show only unread notifications.'), $unread)); } protected function getURI($path) { return '/notification/'.$path; } - public function getBuiltinQueryNames() { + protected function getBuiltinQueryNames() { $names = array( 'all' => pht('All Notifications'), 'unread' => pht('Unread Notifications'), ); return $names; } public function buildSavedQueryFromBuiltin($query_key) { $query = $this->newSavedQuery(); $query->setQueryKey($query_key); switch ($query_key) { case 'all': return $query; case 'unread': return $query->setParameter('unread', true); } return parent::buildSavedQueryFromBuiltin($query_key); } protected function renderResultList( array $notifications, PhabricatorSavedQuery $query, array $handles) { assert_instances_of($notifications, 'PhabricatorFeedStory'); $viewer = $this->requireViewer(); $image = id(new PHUIIconView()) ->setIconFont('fa-eye-slash'); $button = id(new PHUIButtonView()) ->setTag('a') ->addSigil('workflow') ->setColor(PHUIButtonView::SIMPLE) ->setIcon($image) ->setText(pht('Mark All Read')); switch ($query->getQueryKey()) { case 'unread': $header = pht('Unread Notifications'); $no_data = pht('You have no unread notifications.'); break; default: $header = pht('Notifications'); $no_data = pht('You have no notifications.'); break; } $clear_uri = id(new PhutilURI('/notification/clear/')); if ($notifications) { $builder = id(new PhabricatorNotificationBuilder($notifications)) ->setUser($viewer); $view = $builder->buildView(); $clear_uri->setQueryParam( 'chronoKey', head($notifications)->getChronologicalKey()); } else { $view = phutil_tag_div( 'phabricator-notification no-notifications', $no_data); $button->setDisabled(true); } $button->setHref((string)$clear_uri); $view = id(new PHUIBoxView()) ->addPadding(PHUI::PADDING_MEDIUM) ->addClass('phabricator-notification-list') ->appendChild($view); $notif_header = id(new PHUIHeaderView()) ->setHeader($header) ->addActionLink($button); return id(new PHUIObjectBoxView()) ->setHeader($notif_header) ->appendChild($view); } public function shouldUseOffsetPaging() { return true; } } diff --git a/src/applications/oauthserver/query/PhabricatorOAuthServerClientSearchEngine.php b/src/applications/oauthserver/query/PhabricatorOAuthServerClientSearchEngine.php index 5fa7fbcefa..e0729015f2 100644 --- a/src/applications/oauthserver/query/PhabricatorOAuthServerClientSearchEngine.php +++ b/src/applications/oauthserver/query/PhabricatorOAuthServerClientSearchEngine.php @@ -1,118 +1,118 @@ setParameter( 'creatorPHIDs', $this->readUsersFromRequest($request, 'creators')); return $saved; } public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { $query = id(new PhabricatorOAuthServerClientQuery()); $creator_phids = $saved->getParameter('creatorPHIDs', array()); if ($creator_phids) { $query->withCreatorPHIDs($saved->getParameter('creatorPHIDs', array())); } return $query; } public function buildSearchForm( AphrontFormView $form, PhabricatorSavedQuery $saved_query) { $phids = $saved_query->getParameter('creatorPHIDs', array()); $creator_handles = id(new PhabricatorHandleQuery()) ->setViewer($this->requireViewer()) ->withPHIDs($phids) ->execute(); $form ->appendChild( id(new AphrontFormTokenizerControl()) ->setDatasource(new PhabricatorPeopleDatasource()) ->setName('creators') ->setLabel(pht('Creators')) ->setValue($creator_handles)); } protected function getURI($path) { return '/oauthserver/'.$path; } - public function getBuiltinQueryNames() { + protected function getBuiltinQueryNames() { $names = array(); if ($this->requireViewer()->isLoggedIn()) { $names['created'] = pht('Created'); } $names['all'] = pht('All Applications'); return $names; } public function buildSavedQueryFromBuiltin($query_key) { $query = $this->newSavedQuery(); $query->setQueryKey($query_key); switch ($query_key) { case 'all': return $query; case 'created': return $query->setParameter( 'creatorPHIDs', array($this->requireViewer()->getPHID())); } return parent::buildSavedQueryFromBuiltin($query_key); } protected function getRequiredHandlePHIDsForResultList( array $clients, PhabricatorSavedQuery $query) { return mpull($clients, 'getCreatorPHID'); } protected function renderResultList( array $clients, PhabricatorSavedQuery $query, array $handles) { assert_instances_of($clients, 'PhabricatorOauthServerClient'); $viewer = $this->requireViewer(); $list = id(new PHUIObjectItemListView()) ->setUser($viewer); foreach ($clients as $client) { $creator = $handles[$client->getCreatorPHID()]; $item = id(new PHUIObjectItemView()) ->setObjectName(pht('Application %d', $client->getID())) ->setHeader($client->getName()) ->setHref($client->getViewURI()) ->setObject($client) ->addByline(pht('Creator: %s', $creator->renderLink())); $list->addItem($item); } return $list; } } diff --git a/src/applications/passphrase/query/PassphraseCredentialSearchEngine.php b/src/applications/passphrase/query/PassphraseCredentialSearchEngine.php index 3785857aeb..3f1bac81e5 100644 --- a/src/applications/passphrase/query/PassphraseCredentialSearchEngine.php +++ b/src/applications/passphrase/query/PassphraseCredentialSearchEngine.php @@ -1,129 +1,129 @@ setParameter( 'isDestroyed', $this->readBoolFromRequest($request, 'isDestroyed')); $saved->setParameter('name', $request->getStr('name')); return $saved; } public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { $query = id(new PassphraseCredentialQuery()); $destroyed = $saved->getParameter('isDestroyed'); if ($destroyed !== null) { $query->withIsDestroyed($destroyed); } $name = $saved->getParameter('name'); if (strlen($name)) { $query->withNameContains($name); } return $query; } public function buildSearchForm( AphrontFormView $form, PhabricatorSavedQuery $saved_query) { $name = $saved_query->getParameter('name'); $form ->appendChild( id(new AphrontFormSelectControl()) ->setName('isDestroyed') ->setLabel(pht('Status')) ->setValue($this->getBoolFromQuery($saved_query, 'isDestroyed')) ->setOptions( array( '' => pht('Show All Credentials'), 'false' => pht('Show Only Active Credentials'), 'true' => pht('Show Only Destroyed Credentials'), ))) ->appendChild( id(new AphrontFormTextControl()) ->setName('name') ->setLabel(pht('Name Contains')) ->setValue($name)); } protected function getURI($path) { return '/passphrase/'.$path; } - public function getBuiltinQueryNames() { + protected function getBuiltinQueryNames() { return array( 'active' => pht('Active Credentials'), 'all' => pht('All Credentials'), ); } public function buildSavedQueryFromBuiltin($query_key) { $query = $this->newSavedQuery(); $query->setQueryKey($query_key); switch ($query_key) { case 'all': return $query; case 'active': return $query->setParameter('isDestroyed', false); } return parent::buildSavedQueryFromBuiltin($query_key); } protected function renderResultList( array $credentials, PhabricatorSavedQuery $query, array $handles) { assert_instances_of($credentials, 'PassphraseCredential'); $viewer = $this->requireViewer(); $list = new PHUIObjectItemListView(); $list->setUser($viewer); foreach ($credentials as $credential) { $item = id(new PHUIObjectItemView()) ->setObjectName('K'.$credential->getID()) ->setHeader($credential->getName()) ->setHref('/K'.$credential->getID()) ->setObject($credential); $item->addAttribute( pht('Login: %s', $credential->getUsername())); if ($credential->getIsDestroyed()) { $item->addIcon('fa-ban', pht('Destroyed')); $item->setDisabled(true); } $type = PassphraseCredentialType::getTypeByConstant( $credential->getCredentialType()); if ($type) { $item->addIcon('fa-wrench', $type->getCredentialTypeName()); } $list->addItem($item); } return $list; } } diff --git a/src/applications/paste/query/PhabricatorPasteSearchEngine.php b/src/applications/paste/query/PhabricatorPasteSearchEngine.php index f7289c7b29..d1c90e093d 100644 --- a/src/applications/paste/query/PhabricatorPasteSearchEngine.php +++ b/src/applications/paste/query/PhabricatorPasteSearchEngine.php @@ -1,195 +1,195 @@ setParameter( 'authorPHIDs', $this->readUsersFromRequest($request, 'authors')); $languages = $request->getStrList('languages'); if ($request->getBool('noLanguage')) { $languages[] = null; } $saved->setParameter('languages', $languages); $saved->setParameter('createdStart', $request->getStr('createdStart')); $saved->setParameter('createdEnd', $request->getStr('createdEnd')); return $saved; } public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { $query = id(new PhabricatorPasteQuery()) ->needContent(true) ->withAuthorPHIDs($saved->getParameter('authorPHIDs', array())) ->withLanguages($saved->getParameter('languages', array())); $start = $this->parseDateTime($saved->getParameter('createdStart')); $end = $this->parseDateTime($saved->getParameter('createdEnd')); if ($start) { $query->withDateCreatedAfter($start); } if ($end) { $query->withDateCreatedBefore($end); } return $query; } public function buildSearchForm( AphrontFormView $form, PhabricatorSavedQuery $saved_query) { $phids = $saved_query->getParameter('authorPHIDs', array()); $author_handles = id(new PhabricatorHandleQuery()) ->setViewer($this->requireViewer()) ->withPHIDs($phids) ->execute(); $languages = $saved_query->getParameter('languages', array()); $no_language = false; foreach ($languages as $key => $language) { if ($language === null) { $no_language = true; unset($languages[$key]); continue; } } $form ->appendChild( id(new AphrontFormTokenizerControl()) ->setDatasource(new PhabricatorPeopleDatasource()) ->setName('authors') ->setLabel(pht('Authors')) ->setValue($author_handles)) ->appendChild( id(new AphrontFormTextControl()) ->setName('languages') ->setLabel(pht('Languages')) ->setValue(implode(', ', $languages))) ->appendChild( id(new AphrontFormCheckboxControl()) ->addCheckbox( 'noLanguage', 1, pht('Find Pastes with no specified language.'), $no_language)); $this->buildDateRange( $form, $saved_query, 'createdStart', pht('Created After'), 'createdEnd', pht('Created Before')); } protected function getURI($path) { return '/paste/'.$path; } - public function getBuiltinQueryNames() { + protected function getBuiltinQueryNames() { $names = array( 'all' => pht('All Pastes'), ); if ($this->requireViewer()->isLoggedIn()) { $names['authored'] = pht('Authored'); } return $names; } public function buildSavedQueryFromBuiltin($query_key) { $query = $this->newSavedQuery(); $query->setQueryKey($query_key); switch ($query_key) { case 'all': return $query; case 'authored': return $query->setParameter( 'authorPHIDs', array($this->requireViewer()->getPHID())); } return parent::buildSavedQueryFromBuiltin($query_key); } protected function getRequiredHandlePHIDsForResultList( array $pastes, PhabricatorSavedQuery $query) { return mpull($pastes, 'getAuthorPHID'); } protected function renderResultList( array $pastes, PhabricatorSavedQuery $query, array $handles) { assert_instances_of($pastes, 'PhabricatorPaste'); $viewer = $this->requireViewer(); $lang_map = PhabricatorEnv::getEnvConfig('pygments.dropdown-choices'); $list = new PHUIObjectItemListView(); $list->setUser($viewer); foreach ($pastes as $paste) { $created = phabricator_date($paste->getDateCreated(), $viewer); $author = $handles[$paste->getAuthorPHID()]->renderLink(); $lines = phutil_split_lines($paste->getContent()); $preview = id(new PhabricatorSourceCodeView()) ->setLimit(5) ->setLines($lines) ->setURI(new PhutilURI($paste->getURI())); $source_code = phutil_tag( 'div', array( 'class' => 'phabricator-source-code-summary', ), $preview); $created = phabricator_datetime($paste->getDateCreated(), $viewer); $line_count = count($lines); $line_count = pht( '%s Line(s)', new PhutilNumber($line_count)); $title = nonempty($paste->getTitle(), pht('(An Untitled Masterwork)')); $item = id(new PHUIObjectItemView()) ->setObjectName('P'.$paste->getID()) ->setHeader($title) ->setHref('/P'.$paste->getID()) ->setObject($paste) ->addByline(pht('Author: %s', $author)) ->addIcon('none', $created) ->addIcon('none', $line_count) ->appendChild($source_code); $lang_name = $paste->getLanguage(); if ($lang_name) { $lang_name = idx($lang_map, $lang_name, $lang_name); $item->addIcon('none', $lang_name); } $list->addItem($item); } return $list; } } diff --git a/src/applications/people/query/PhabricatorPeopleLogSearchEngine.php b/src/applications/people/query/PhabricatorPeopleLogSearchEngine.php index 301e67757d..5c1836ce8c 100644 --- a/src/applications/people/query/PhabricatorPeopleLogSearchEngine.php +++ b/src/applications/people/query/PhabricatorPeopleLogSearchEngine.php @@ -1,209 +1,209 @@ setParameter( 'userPHIDs', $this->readUsersFromRequest($request, 'users')); $saved->setParameter( 'actorPHIDs', $this->readUsersFromRequest($request, 'actors')); $saved->setParameter( 'actions', $this->readListFromRequest($request, 'actions')); $saved->setParameter( 'ip', $request->getStr('ip')); $saved->setParameter( 'sessions', $this->readListFromRequest($request, 'sessions')); return $saved; } public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { $query = id(new PhabricatorPeopleLogQuery()); // NOTE: If the viewer isn't an administrator, always restrict the query to // related records. This echoes the policy logic of these logs. This is // mostly a performance optimization, to prevent us from having to pull // large numbers of logs that the user will not be able to see and filter // them in-process. $viewer = $this->requireViewer(); if (!$viewer->getIsAdmin()) { $query->withRelatedPHIDs(array($viewer->getPHID())); } $actor_phids = $saved->getParameter('actorPHIDs', array()); if ($actor_phids) { $query->withActorPHIDs($actor_phids); } $user_phids = $saved->getParameter('userPHIDs', array()); if ($user_phids) { $query->withUserPHIDs($user_phids); } $actions = $saved->getParameter('actions', array()); if ($actions) { $query->withActions($actions); } $remote_prefix = $saved->getParameter('ip'); if (strlen($remote_prefix)) { $query->withRemoteAddressprefix($remote_prefix); } $sessions = $saved->getParameter('sessions', array()); if ($sessions) { $query->withSessionKeys($sessions); } return $query; } public function buildSearchForm( AphrontFormView $form, PhabricatorSavedQuery $saved) { $actor_phids = $saved->getParameter('actorPHIDs', array()); $user_phids = $saved->getParameter('userPHIDs', array()); $all_phids = array_merge( $actor_phids, $user_phids); if ($all_phids) { $handles = id(new PhabricatorHandleQuery()) ->setViewer($this->requireViewer()) ->withPHIDs($all_phids) ->execute(); } else { $handles = array(); } $actor_handles = array_select_keys($handles, $actor_phids); $user_handles = array_select_keys($handles, $user_phids); $actions = $saved->getParameter('actions', array()); $remote_prefix = $saved->getParameter('ip'); $sessions = $saved->getParameter('sessions', array()); $actions = array_fuse($actions); $action_control = id(new AphrontFormCheckboxControl()) ->setLabel(pht('Actions')); $action_types = PhabricatorUserLog::getActionTypeMap(); foreach ($action_types as $type => $label) { $action_control->addCheckbox( 'actions[]', $type, $label, isset($actions[$label])); } $form ->appendChild( id(new AphrontFormTokenizerControl()) ->setDatasource(new PhabricatorPeopleDatasource()) ->setName('actors') ->setLabel(pht('Actors')) ->setValue($actor_handles)) ->appendChild( id(new AphrontFormTokenizerControl()) ->setDatasource(new PhabricatorPeopleDatasource()) ->setName('users') ->setLabel(pht('Users')) ->setValue($user_handles)) ->appendChild($action_control) ->appendChild( id(new AphrontFormTextControl()) ->setLabel(pht('Filter IP')) ->setName('ip') ->setValue($remote_prefix)) ->appendChild( id(new AphrontFormTextControl()) ->setLabel(pht('Sessions')) ->setName('sessions') ->setValue(implode(', ', $sessions))); } protected function getURI($path) { return '/people/logs/'.$path; } - public function getBuiltinQueryNames() { + protected function getBuiltinQueryNames() { $names = array( 'all' => pht('All'), ); return $names; } public function buildSavedQueryFromBuiltin($query_key) { $query = $this->newSavedQuery(); $query->setQueryKey($query_key); switch ($query_key) { case 'all': return $query; } return parent::buildSavedQueryFromBuiltin($query_key); } protected function getRequiredHandlePHIDsForResultList( array $logs, PhabricatorSavedQuery $query) { $phids = array(); foreach ($logs as $log) { $phids[$log->getActorPHID()] = true; $phids[$log->getUserPHID()] = true; } return array_keys($phids); } protected function renderResultList( array $logs, PhabricatorSavedQuery $query, array $handles) { assert_instances_of($logs, 'PhabricatorUserLog'); $viewer = $this->requireViewer(); $table = id(new PhabricatorUserLogView()) ->setUser($viewer) ->setLogs($logs) ->setHandles($handles); if ($viewer->getIsAdmin()) { $table->setSearchBaseURI($this->getApplicationURI('logs/')); } return id(new PHUIObjectBoxView()) ->setHeaderText(pht('User Activity Logs')) ->appendChild($table); } } diff --git a/src/applications/people/query/PhabricatorPeopleSearchEngine.php b/src/applications/people/query/PhabricatorPeopleSearchEngine.php index bc5ba884b6..4fbb1371fc 100644 --- a/src/applications/people/query/PhabricatorPeopleSearchEngine.php +++ b/src/applications/people/query/PhabricatorPeopleSearchEngine.php @@ -1,270 +1,270 @@ setParameter('usernames', $request->getStrList('usernames')); $saved->setParameter('nameLike', $request->getStr('nameLike')); $saved->setParameter('isAdmin', $request->getStr('isAdmin')); $saved->setParameter('isDisabled', $request->getStr('isDisabled')); $saved->setParameter('isSystemAgent', $request->getStr('isSystemAgent')); $saved->setParameter('needsApproval', $request->getStr('needsApproval')); $saved->setParameter('createdStart', $request->getStr('createdStart')); $saved->setParameter('createdEnd', $request->getStr('createdEnd')); $this->readCustomFieldsFromRequest($request, $saved); return $saved; } public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { $query = id(new PhabricatorPeopleQuery()) ->needPrimaryEmail(true) ->needProfileImage(true); $viewer = $this->requireViewer(); // If the viewer can't browse the user directory, restrict the query to // just the user's own profile. This is a little bit silly, but serves to // restrict users from creating a dashboard panel which essentially just // contains a user directory anyway. $can_browse = PhabricatorPolicyFilter::hasCapability( $viewer, $this->getApplication(), PeopleBrowseUserDirectoryCapability::CAPABILITY); if (!$can_browse) { $query->withPHIDs(array($viewer->getPHID())); } $usernames = $saved->getParameter('usernames', array()); if ($usernames) { $query->withUsernames($usernames); } $like = $saved->getParameter('nameLike'); if ($like) { $query->withNameLike($like); } $is_admin = $saved->getParameter('isAdmin'); $is_disabled = $saved->getParameter('isDisabled'); $is_system_agent = $saved->getParameter('isSystemAgent'); $needs_approval = $saved->getParameter('needsApproval'); $no_disabled = $saved->getParameter('noDisabled'); if ($is_admin) { $query->withIsAdmin(true); } if ($is_disabled) { $query->withIsDisabled(true); } else if ($no_disabled) { $query->withIsDisabled(false); } if ($is_system_agent) { $query->withIsSystemAgent(true); } if ($needs_approval) { $query->withIsApproved(false); } $start = $this->parseDateTime($saved->getParameter('createdStart')); $end = $this->parseDateTime($saved->getParameter('createdEnd')); if ($start) { $query->withDateCreatedAfter($start); } if ($end) { $query->withDateCreatedBefore($end); } $this->applyCustomFieldsToQuery($query, $saved); return $query; } public function buildSearchForm( AphrontFormView $form, PhabricatorSavedQuery $saved) { $usernames = $saved->getParameter('usernames', array()); $like = $saved->getParameter('nameLike'); $is_admin = $saved->getParameter('isAdmin'); $is_disabled = $saved->getParameter('isDisabled'); $is_system_agent = $saved->getParameter('isSystemAgent'); $needs_approval = $saved->getParameter('needsApproval'); $form ->appendChild( id(new AphrontFormTextControl()) ->setName('usernames') ->setLabel(pht('Usernames')) ->setValue(implode(', ', $usernames))) ->appendChild( id(new AphrontFormTextControl()) ->setName('nameLike') ->setLabel(pht('Name Contains')) ->setValue($like)) ->appendChild( id(new AphrontFormCheckboxControl()) ->setLabel('Role') ->addCheckbox( 'isAdmin', 1, pht('Show only administrators.'), $is_admin) ->addCheckbox( 'isDisabled', 1, pht('Show only disabled users.'), $is_disabled) ->addCheckbox( 'isSystemAgent', 1, pht('Show only bots.'), $is_system_agent) ->addCheckbox( 'needsApproval', 1, pht('Show only users who need approval.'), $needs_approval)); $this->appendCustomFieldsToForm($form, $saved); $this->buildDateRange( $form, $saved, 'createdStart', pht('Joined After'), 'createdEnd', pht('Joined Before')); } protected function getURI($path) { return '/people/'.$path; } - public function getBuiltinQueryNames() { + protected function getBuiltinQueryNames() { $names = array( 'all' => pht('All'), ); $viewer = $this->requireViewer(); if ($viewer->getIsAdmin()) { $names['approval'] = pht('Approval Queue'); } return $names; } public function buildSavedQueryFromBuiltin($query_key) { $query = $this->newSavedQuery(); $query->setQueryKey($query_key); switch ($query_key) { case 'all': return $query; case 'approval': return $query ->setParameter('needsApproval', true) ->setParameter('noDisabled', true); } return parent::buildSavedQueryFromBuiltin($query_key); } protected function renderResultList( array $users, PhabricatorSavedQuery $query, array $handles) { assert_instances_of($users, 'PhabricatorUser'); $request = $this->getRequest(); $viewer = $this->requireViewer(); $list = new PHUIObjectItemListView(); $is_approval = ($query->getQueryKey() == 'approval'); foreach ($users as $user) { $primary_email = $user->loadPrimaryEmail(); if ($primary_email && $primary_email->getIsVerified()) { $email = pht('Verified'); } else { $email = pht('Unverified'); } $item = new PHUIObjectItemView(); $item->setHeader($user->getFullName()) ->setHref('/p/'.$user->getUsername().'/') ->addAttribute(phabricator_datetime($user->getDateCreated(), $viewer)) ->addAttribute($email) ->setImageURI($user->getProfileImageURI()); if ($is_approval && $primary_email) { $item->addAttribute($primary_email->getAddress()); } if ($user->getIsDisabled()) { $item->addIcon('fa-ban', pht('Disabled')); } if (!$is_approval) { if (!$user->getIsApproved()) { $item->addIcon('fa-clock-o', pht('Needs Approval')); } } if ($user->getIsAdmin()) { $item->addIcon('fa-star', pht('Admin')); } if ($user->getIsSystemAgent()) { $item->addIcon('fa-desktop', pht('Bot/Script')); } if ($viewer->getIsAdmin()) { $user_id = $user->getID(); if ($is_approval) { $item->addAction( id(new PHUIListItemView()) ->setIcon('fa-ban') ->setName(pht('Disable')) ->setWorkflow(true) ->setHref($this->getApplicationURI('disapprove/'.$user_id.'/'))); $item->addAction( id(new PHUIListItemView()) ->setIcon('fa-thumbs-o-up') ->setName(pht('Approve')) ->setWorkflow(true) ->setHref($this->getApplicationURI('approve/'.$user_id.'/'))); } } $list->addItem($item); } return $list; } } diff --git a/src/applications/pholio/query/PholioMockSearchEngine.php b/src/applications/pholio/query/PholioMockSearchEngine.php index 7656cdfc49..2940031057 100644 --- a/src/applications/pholio/query/PholioMockSearchEngine.php +++ b/src/applications/pholio/query/PholioMockSearchEngine.php @@ -1,147 +1,147 @@ setParameter( 'authorPHIDs', $this->readUsersFromRequest($request, 'authors')); $saved->setParameter( 'statuses', $request->getStrList('status')); return $saved; } public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { $query = id(new PholioMockQuery()) ->needCoverFiles(true) ->needImages(true) ->needTokenCounts(true) ->withAuthorPHIDs($saved->getParameter('authorPHIDs', array())) ->withStatuses($saved->getParameter('statuses', array())); return $query; } public function buildSearchForm( AphrontFormView $form, PhabricatorSavedQuery $saved_query) { $phids = $saved_query->getParameter('authorPHIDs', array()); $author_handles = id(new PhabricatorHandleQuery()) ->setViewer($this->requireViewer()) ->withPHIDs($phids) ->execute(); $statuses = array( '' => pht('Any Status'), 'closed' => pht('Closed'), 'open' => pht('Open'), ); $status = $saved_query->getParameter('statuses', array()); $status = head($status); $form ->appendChild( id(new AphrontFormTokenizerControl()) ->setDatasource(new PhabricatorPeopleDatasource()) ->setName('authors') ->setLabel(pht('Authors')) ->setValue($author_handles)) ->appendChild( id(new AphrontFormSelectControl()) ->setLabel(pht('Status')) ->setName('status') ->setOptions($statuses) ->setValue($status)); } protected function getURI($path) { return '/pholio/'.$path; } - public function getBuiltinQueryNames() { + protected function getBuiltinQueryNames() { $names = array( 'open' => pht('Open Mocks'), 'all' => pht('All Mocks'), ); if ($this->requireViewer()->isLoggedIn()) { $names['authored'] = pht('Authored'); } return $names; } public function buildSavedQueryFromBuiltin($query_key) { $query = $this->newSavedQuery(); $query->setQueryKey($query_key); switch ($query_key) { case 'open': return $query->setParameter( 'statuses', array('open')); case 'all': return $query; case 'authored': return $query->setParameter( 'authorPHIDs', array($this->requireViewer()->getPHID())); } return parent::buildSavedQueryFromBuiltin($query_key); } protected function getRequiredHandlePHIDsForResultList( array $mocks, PhabricatorSavedQuery $query) { return mpull($mocks, 'getAuthorPHID'); } protected function renderResultList( array $mocks, PhabricatorSavedQuery $query, array $handles) { assert_instances_of($mocks, 'PholioMock'); $viewer = $this->requireViewer(); $board = new PHUIPinboardView(); foreach ($mocks as $mock) { $header = 'M'.$mock->getID().' '.$mock->getName(); $item = id(new PHUIPinboardItemView()) ->setHeader($header) ->setURI('/M'.$mock->getID()) ->setImageURI($mock->getCoverFile()->getThumb280x210URI()) ->setImageSize(280, 210) ->setDisabled($mock->isClosed()) ->addIconCount('fa-picture-o', count($mock->getImages())) ->addIconCount('fa-trophy', $mock->getTokenCount()); if ($mock->getAuthorPHID()) { $author_handle = $handles[$mock->getAuthorPHID()]; $datetime = phabricator_date($mock->getDateCreated(), $viewer); $item->appendChild( pht('By %s on %s', $author_handle->renderLink(), $datetime)); } $board->addItem($item); } return $board; } } diff --git a/src/applications/phortune/query/PhortuneCartSearchEngine.php b/src/applications/phortune/query/PhortuneCartSearchEngine.php index 88e1777a5e..a04bd03072 100644 --- a/src/applications/phortune/query/PhortuneCartSearchEngine.php +++ b/src/applications/phortune/query/PhortuneCartSearchEngine.php @@ -1,195 +1,195 @@ account = $account; return $this; } public function getAccount() { return $this->account; } public function setMerchant(PhortuneMerchant $merchant) { $this->merchant = $merchant; return $this; } public function getMerchant() { return $this->merchant; } public function getResultTypeDescription() { return pht('Phortune Orders'); } public function buildSavedQueryFromRequest(AphrontRequest $request) { $saved = new PhabricatorSavedQuery(); return $saved; } public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { $query = id(new PhortuneCartQuery()) ->needPurchases(true) ->withStatuses( array( PhortuneCart::STATUS_PURCHASING, PhortuneCart::STATUS_CHARGED, PhortuneCart::STATUS_HOLD, PhortuneCart::STATUS_REVIEW, PhortuneCart::STATUS_PURCHASED, )); $viewer = $this->requireViewer(); $merchant = $this->getMerchant(); $account = $this->getAccount(); if ($merchant) { $can_edit = PhabricatorPolicyFilter::hasCapability( $viewer, $merchant, PhabricatorPolicyCapability::CAN_EDIT); if (!$can_edit) { throw new Exception( pht('You can not query orders for a merchant you do not control.')); } $query->withMerchantPHIDs(array($merchant->getPHID())); } else if ($account) { $can_edit = PhabricatorPolicyFilter::hasCapability( $viewer, $account, PhabricatorPolicyCapability::CAN_EDIT); if (!$can_edit) { throw new Exception( pht( 'You can not query orders for an account you are not '. 'a member of.')); } $query->withAccountPHIDs(array($account->getPHID())); } else { $accounts = id(new PhortuneAccountQuery()) ->withMemberPHIDs(array($viewer->getPHID())) ->execute(); if ($accounts) { $query->withAccountPHIDs(mpull($accounts, 'getPHID')); } else { throw new Exception(pht('You have no accounts!')); } } return $query; } public function buildSearchForm( AphrontFormView $form, PhabricatorSavedQuery $saved_query) {} protected function getURI($path) { $merchant = $this->getMerchant(); $account = $this->getAccount(); if ($merchant) { return '/phortune/merchant/'.$merchant->getID().'/order/'.$path; } else if ($account) { return '/phortune/'.$account->getID().'/order/'; } else { return '/phortune/order/'.$path; } } - public function getBuiltinQueryNames() { + protected function getBuiltinQueryNames() { $names = array( 'all' => pht('All Orders'), ); return $names; } public function buildSavedQueryFromBuiltin($query_key) { $query = $this->newSavedQuery(); $query->setQueryKey($query_key); switch ($query_key) { case 'all': return $query; } return parent::buildSavedQueryFromBuiltin($query_key); } protected function getRequiredHandlePHIDsForResultList( array $carts, PhabricatorSavedQuery $query) { $phids = array(); foreach ($carts as $cart) { $phids[] = $cart->getPHID(); $phids[] = $cart->getMerchantPHID(); $phids[] = $cart->getAuthorPHID(); } return $phids; } protected function renderResultList( array $carts, PhabricatorSavedQuery $query, array $handles) { assert_instances_of($carts, 'PhortuneCart'); $viewer = $this->requireViewer(); $rows = array(); foreach ($carts as $cart) { $merchant = $cart->getMerchant(); $rows[] = array( $cart->getID(), $handles[$cart->getPHID()]->renderLink(), $handles[$merchant->getPHID()]->renderLink(), $handles[$cart->getAuthorPHID()]->renderLink(), $cart->getTotalPriceAsCurrency()->formatForDisplay(), PhortuneCart::getNameForStatus($cart->getStatus()), phabricator_datetime($cart->getDateModified(), $viewer), ); } $table = id(new AphrontTableView($rows)) ->setNoDataString(pht('No orders match the query.')) ->setHeaders( array( pht('ID'), pht('Order'), pht('Merchant'), pht('Authorized By'), pht('Amount'), pht('Status'), pht('Updated'), )) ->setColumnClasses( array( '', 'pri', '', '', 'wide right', '', 'right', )); $merchant = $this->getMerchant(); if ($merchant) { $header = pht('Orders for %s', $merchant->getName()); } else { $header = pht('Your Orders'); } return id(new PHUIObjectBoxView()) ->setHeaderText($header) ->appendChild($table); } } diff --git a/src/applications/phortune/query/PhortuneChargeSearchEngine.php b/src/applications/phortune/query/PhortuneChargeSearchEngine.php index 27ac4e1d80..ba87cffc75 100644 --- a/src/applications/phortune/query/PhortuneChargeSearchEngine.php +++ b/src/applications/phortune/query/PhortuneChargeSearchEngine.php @@ -1,125 +1,125 @@ account = $account; return $this; } public function getAccount() { return $this->account; } public function getResultTypeDescription() { return pht('Phortune Charges'); } public function buildSavedQueryFromRequest(AphrontRequest $request) { $saved = new PhabricatorSavedQuery(); return $saved; } public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { $query = id(new PhortuneChargeQuery()); $viewer = $this->requireViewer(); $account = $this->getAccount(); if ($account) { $can_edit = PhabricatorPolicyFilter::hasCapability( $viewer, $account, PhabricatorPolicyCapability::CAN_EDIT); if (!$can_edit) { throw new Exception( pht( 'You can not query charges for an account you are not '. 'a member of.')); } $query->withAccountPHIDs(array($account->getPHID())); } else { $accounts = id(new PhortuneAccountQuery()) ->withMemberPHIDs(array($viewer->getPHID())) ->execute(); if ($accounts) { $query->withAccountPHIDs(mpull($accounts, 'getPHID')); } else { throw new Exception(pht('You have no accounts!')); } } return $query; } public function buildSearchForm( AphrontFormView $form, PhabricatorSavedQuery $saved_query) {} protected function getURI($path) { $account = $this->getAccount(); if ($account) { return '/phortune/'.$account->getID().'/charge/'; } else { return '/phortune/charge/'.$path; } } - public function getBuiltinQueryNames() { + protected function getBuiltinQueryNames() { $names = array( 'all' => pht('All Charges'), ); return $names; } public function buildSavedQueryFromBuiltin($query_key) { $query = $this->newSavedQuery(); $query->setQueryKey($query_key); switch ($query_key) { case 'all': return $query; } return parent::buildSavedQueryFromBuiltin($query_key); } protected function getRequiredHandlePHIDsForResultList( array $charges, PhabricatorSavedQuery $query) { $phids = array(); foreach ($charges as $charge) { $phids[] = $charge->getProviderPHID(); $phids[] = $charge->getCartPHID(); $phids[] = $charge->getMerchantPHID(); $phids[] = $charge->getPaymentMethodPHID(); } return $phids; } protected function renderResultList( array $charges, PhabricatorSavedQuery $query, array $handles) { assert_instances_of($charges, 'PhortuneCharge'); $viewer = $this->requireViewer(); $table = id(new PhortuneChargeTableView()) ->setUser($viewer) ->setCharges($charges) ->setHandles($handles); return id(new PHUIObjectBoxView()) ->setHeaderText(pht('Charges')) ->appendChild($table); } } diff --git a/src/applications/phortune/query/PhortuneMerchantSearchEngine.php b/src/applications/phortune/query/PhortuneMerchantSearchEngine.php index 0daf54374c..efb8cd5672 100644 --- a/src/applications/phortune/query/PhortuneMerchantSearchEngine.php +++ b/src/applications/phortune/query/PhortuneMerchantSearchEngine.php @@ -1,79 +1,79 @@ pht('All Merchants'), ); return $names; } public function buildSavedQueryFromBuiltin($query_key) { $query = $this->newSavedQuery(); $query->setQueryKey($query_key); switch ($query_key) { case 'all': return $query; } return parent::buildSavedQueryFromBuiltin($query_key); } protected function getRequiredHandlePHIDsForResultList( array $merchants, PhabricatorSavedQuery $query) { return array(); } protected function renderResultList( array $merchants, PhabricatorSavedQuery $query, array $handles) { assert_instances_of($merchants, 'PhortuneMerchant'); $viewer = $this->requireViewer(); $list = new PHUIObjectItemListView(); $list->setUser($viewer); foreach ($merchants as $merchant) { $item = id(new PHUIObjectItemView()) ->setObjectName(pht('Merchant %d', $merchant->getID())) ->setHeader($merchant->getName()) ->setHref('/phortune/merchant/'.$merchant->getID().'/') ->setObject($merchant); $list->addItem($item); } return $list; } } diff --git a/src/applications/phrequent/query/PhrequentSearchEngine.php b/src/applications/phrequent/query/PhrequentSearchEngine.php index 0569c93822..65fb33bd11 100644 --- a/src/applications/phrequent/query/PhrequentSearchEngine.php +++ b/src/applications/phrequent/query/PhrequentSearchEngine.php @@ -1,201 +1,201 @@ getParameter('limit', 1000); } public function buildSavedQueryFromRequest(AphrontRequest $request) { $saved = new PhabricatorSavedQuery(); $saved->setParameter( 'userPHIDs', $this->readUsersFromRequest($request, 'users')); $saved->setParameter('ended', $request->getStr('ended')); $saved->setParameter('order', $request->getStr('order')); return $saved; } public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { $query = id(new PhrequentUserTimeQuery()) ->needPreemptingEvents(true); $user_phids = $saved->getParameter('userPHIDs'); if ($user_phids) { $query->withUserPHIDs($user_phids); } $ended = $saved->getParameter('ended'); if ($ended != null) { $query->withEnded($ended); } $order = $saved->getParameter('order'); if ($order != null) { $query->setOrder($order); } return $query; } public function buildSearchForm( AphrontFormView $form, PhabricatorSavedQuery $saved_query) { $user_phids = $saved_query->getParameter('userPHIDs', array()); $ended = $saved_query->getParameter( 'ended', PhrequentUserTimeQuery::ENDED_ALL); $order = $saved_query->getParameter( 'order', PhrequentUserTimeQuery::ORDER_ENDED_DESC); $phids = array_merge($user_phids); $handles = id(new PhabricatorHandleQuery()) ->setViewer($this->requireViewer()) ->withPHIDs($phids) ->execute(); $form ->appendChild( id(new AphrontFormTokenizerControl()) ->setDatasource(new PhabricatorPeopleDatasource()) ->setName('users') ->setLabel(pht('Users')) ->setValue($handles)) ->appendChild( id(new AphrontFormSelectControl()) ->setLabel(pht('Ended')) ->setName('ended') ->setValue($ended) ->setOptions(PhrequentUserTimeQuery::getEndedSearchOptions())) ->appendChild( id(new AphrontFormSelectControl()) ->setLabel(pht('Order')) ->setName('order') ->setValue($order) ->setOptions(PhrequentUserTimeQuery::getOrderSearchOptions())); } protected function getURI($path) { return '/phrequent/'.$path; } - public function getBuiltinQueryNames() { + protected function getBuiltinQueryNames() { return array( 'tracking' => pht('Currently Tracking'), 'all' => pht('All Tracked'), ); } public function buildSavedQueryFromBuiltin($query_key) { $query = $this->newSavedQuery(); $query->setQueryKey($query_key); switch ($query_key) { case 'all': return $query ->setParameter('order', PhrequentUserTimeQuery::ORDER_ENDED_DESC); case 'tracking': return $query ->setParameter('ended', PhrequentUserTimeQuery::ENDED_NO) ->setParameter('order', PhrequentUserTimeQuery::ORDER_ENDED_DESC); } return parent::buildSavedQueryFromBuiltin($query_key); } protected function getRequiredHandlePHIDsForResultList( array $usertimes, PhabricatorSavedQuery $query) { return array_mergev( array( mpull($usertimes, 'getUserPHID'), mpull($usertimes, 'getObjectPHID'), )); } protected function renderResultList( array $usertimes, PhabricatorSavedQuery $query, array $handles) { assert_instances_of($usertimes, 'PhrequentUserTime'); $viewer = $this->requireViewer(); $view = id(new PHUIObjectItemListView()) ->setUser($viewer); foreach ($usertimes as $usertime) { $item = new PHUIObjectItemView(); if ($usertime->getObjectPHID() === null) { $item->setHeader($usertime->getNote()); } else { $obj = $handles[$usertime->getObjectPHID()]; $item->setHeader($obj->getLinkName()); $item->setHref($obj->getURI()); } $item->setObject($usertime); $item->addByline( pht( 'Tracked: %s', $handles[$usertime->getUserPHID()]->renderLink())); $started_date = phabricator_date($usertime->getDateStarted(), $viewer); $item->addIcon('none', $started_date); $block = new PhrequentTimeBlock(array($usertime)); $time_spent = $block->getTimeSpentOnObject( $usertime->getObjectPHID(), PhabricatorTime::getNow()); $time_spent = $time_spent == 0 ? 'none' : phutil_format_relative_time_detailed($time_spent); if ($usertime->getDateEnded() !== null) { $item->addAttribute( pht( 'Tracked %s', $time_spent)); $item->addAttribute( pht( 'Ended on %s', phabricator_datetime($usertime->getDateEnded(), $viewer))); } else { $item->addAttribute( pht( 'Tracked %s so far', $time_spent)); if ($usertime->getObjectPHID() !== null && $usertime->getUserPHID() === $viewer->getPHID()) { $item->addAction( id(new PHUIListItemView()) ->setIcon('fa-stop') ->addSigil('phrequent-stop-tracking') ->setWorkflow(true) ->setRenderNameAsTooltip(true) ->setName(pht('Stop')) ->setHref( '/phrequent/track/stop/'. $usertime->getObjectPHID().'/')); } $item->setBarColor('green'); } $view->addItem($item); } return $view; } } diff --git a/src/applications/phriction/query/PhrictionSearchEngine.php b/src/applications/phriction/query/PhrictionSearchEngine.php index 8b3f174f16..624fb99918 100644 --- a/src/applications/phriction/query/PhrictionSearchEngine.php +++ b/src/applications/phriction/query/PhrictionSearchEngine.php @@ -1,180 +1,180 @@ setParameter('status', $request->getArr('status')); $saved->setParameter('order', $request->getArr('order')); return $saved; } public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { $query = id(new PhrictionDocumentQuery()) ->needContent(true) ->withStatus(PhrictionDocumentQuery::STATUS_NONSTUB); $status = $saved->getParameter('status'); $status = idx($this->getStatusValues(), $status); if ($status) { $query->withStatus($status); } $order = $saved->getParameter('order'); $order = idx($this->getOrderValues(), $order); if ($order) { $query->setOrder($order); } return $query; } public function buildSearchForm( AphrontFormView $form, PhabricatorSavedQuery $saved_query) { $form ->appendChild( id(new AphrontFormSelectControl()) ->setLabel(pht('Status')) ->setName('status') ->setOptions($this->getStatusOptions()) ->setValue($saved_query->getParameter('status'))) ->appendChild( id(new AphrontFormSelectControl()) ->setLabel(pht('Order')) ->setName('order') ->setOptions($this->getOrderOptions()) ->setValue($saved_query->getParameter('order'))); } protected function getURI($path) { return '/phriction/'.$path; } - public function getBuiltinQueryNames() { + protected function getBuiltinQueryNames() { $names = array( 'active' => pht('Active'), 'updated' => pht('Updated'), 'all' => pht('All'), ); return $names; } public function buildSavedQueryFromBuiltin($query_key) { $query = $this->newSavedQuery(); $query->setQueryKey($query_key); switch ($query_key) { case 'active': return $query->setParameter('status', 'active'); case 'all': return $query; case 'updated': return $query->setParameter('order', 'updated'); } return parent::buildSavedQueryFromBuiltin($query_key); } private function getStatusOptions() { return array( 'active' => pht('Show Active Documents'), 'all' => pht('Show All Documents'), ); } private function getStatusValues() { return array( 'active' => PhrictionDocumentQuery::STATUS_OPEN, 'all' => PhrictionDocumentQuery::STATUS_NONSTUB, ); } private function getOrderOptions() { return array( 'created' => pht('Date Created'), 'updated' => pht('Date Updated'), ); } private function getOrderValues() { return array( 'created' => PhrictionDocumentQuery::ORDER_CREATED, 'updated' => PhrictionDocumentQuery::ORDER_UPDATED, ); } protected function getRequiredHandlePHIDsForResultList( array $documents, PhabricatorSavedQuery $query) { $phids = array(); foreach ($documents as $document) { $content = $document->getContent(); $phids[] = $content->getAuthorPHID(); } return $phids; } protected function renderResultList( array $documents, PhabricatorSavedQuery $query, array $handles) { assert_instances_of($documents, 'PhrictionDocument'); $viewer = $this->requireViewer(); $list = new PHUIObjectItemListView(); $list->setUser($viewer); foreach ($documents as $document) { $content = $document->getContent(); $slug = $document->getSlug(); $author_phid = $content->getAuthorPHID(); $slug_uri = PhrictionDocument::getSlugURI($slug); $byline = pht( 'Edited by %s', $handles[$author_phid]->renderLink()); $updated = phabricator_datetime( $content->getDateCreated(), $viewer); $item = id(new PHUIObjectItemView()) ->setHeader($content->getTitle()) ->setHref($slug_uri) ->addByline($byline) ->addIcon('none', $updated); $item->addAttribute($slug_uri); switch ($document->getStatus()) { case PhrictionDocumentStatus::STATUS_DELETED: $item->setDisabled(true); $item->addIcon('delete', pht('Deleted')); break; case PhrictionDocumentStatus::STATUS_MOVED: $item->setDisabled(true); $item->addIcon('arrow-right', pht('Moved Away')); break; } $list->addItem($item); } return $list; } } diff --git a/src/applications/ponder/query/PonderQuestionSearchEngine.php b/src/applications/ponder/query/PonderQuestionSearchEngine.php index c4e22000df..ef1d277c5e 100644 --- a/src/applications/ponder/query/PonderQuestionSearchEngine.php +++ b/src/applications/ponder/query/PonderQuestionSearchEngine.php @@ -1,178 +1,178 @@ setParameter( 'authorPHIDs', $this->readUsersFromRequest($request, 'authors')); $saved->setParameter( 'answererPHIDs', $this->readUsersFromRequest($request, 'answerers')); $saved->setParameter('status', $request->getStr('status')); return $saved; } public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { $query = id(new PonderQuestionQuery()); $author_phids = $saved->getParameter('authorPHIDs'); if ($author_phids) { $query->withAuthorPHIDs($author_phids); } $answerer_phids = $saved->getParameter('answererPHIDs'); if ($answerer_phids) { $query->withAnswererPHIDs($answerer_phids); } $status = $saved->getParameter('status'); if ($status != null) { switch ($status) { case 0: $query->withStatus(PonderQuestionQuery::STATUS_OPEN); break; case 1: $query->withStatus(PonderQuestionQuery::STATUS_CLOSED); break; } } return $query; } public function buildSearchForm( AphrontFormView $form, PhabricatorSavedQuery $saved_query) { $author_phids = $saved_query->getParameter('authorPHIDs', array()); $answerer_phids = $saved_query->getParameter('answererPHIDs', array()); $status = $saved_query->getParameter( 'status', PonderQuestionStatus::STATUS_OPEN); $phids = array_merge($author_phids, $answerer_phids); $handles = id(new PhabricatorHandleQuery()) ->setViewer($this->requireViewer()) ->withPHIDs($phids) ->execute(); $form ->appendChild( id(new AphrontFormTokenizerControl()) ->setDatasource(new PhabricatorPeopleDatasource()) ->setName('authors') ->setLabel(pht('Authors')) ->setValue(array_select_keys($handles, $author_phids))) ->appendChild( id(new AphrontFormTokenizerControl()) ->setDatasource(new PhabricatorPeopleDatasource()) ->setName('answerers') ->setLabel(pht('Answered By')) ->setValue(array_select_keys($handles, $answerer_phids))) ->appendChild( id(new AphrontFormSelectControl()) ->setLabel(pht('Status')) ->setName('status') ->setValue($status) ->setOptions(PonderQuestionStatus::getQuestionStatusMap())); } protected function getURI($path) { return '/ponder/'.$path; } - public function getBuiltinQueryNames() { + protected function getBuiltinQueryNames() { $names = array( 'open' => pht('Open Questions'), 'all' => pht('All Questions'), ); if ($this->requireViewer()->isLoggedIn()) { $names['authored'] = pht('Authored'); $names['answered'] = pht('Answered'); } return $names; } public function buildSavedQueryFromBuiltin($query_key) { $query = $this->newSavedQuery(); $query->setQueryKey($query_key); switch ($query_key) { case 'all': return $query; case 'open': return $query->setParameter('status', PonderQuestionQuery::STATUS_OPEN); case 'authored': return $query->setParameter( 'authorPHIDs', array($this->requireViewer()->getPHID())); case 'answered': return $query->setParameter( 'answererPHIDs', array($this->requireViewer()->getPHID())); } return parent::buildSavedQueryFromBuiltin($query_key); } protected function getRequiredHandlePHIDsForResultList( array $questions, PhabricatorSavedQuery $query) { return mpull($questions, 'getAuthorPHID'); } protected function renderResultList( array $questions, PhabricatorSavedQuery $query, array $handles) { assert_instances_of($questions, 'PonderQuestion'); $viewer = $this->requireViewer(); $view = id(new PHUIObjectItemListView()) ->setUser($viewer); foreach ($questions as $question) { $item = new PHUIObjectItemView(); $item->setObjectName('Q'.$question->getID()); $item->setHeader($question->getTitle()); $item->setHref('/Q'.$question->getID()); $item->setObject($question); $item->setBarColor( PonderQuestionStatus::getQuestionStatusTagColor( $question->getStatus())); $created_date = phabricator_date($question->getDateCreated(), $viewer); $item->addIcon('none', $created_date); $item->addByline( pht( 'Asked by %s', $handles[$question->getAuthorPHID()]->renderLink())); $item->addAttribute( pht('%d Answer(s)', $question->getAnswerCount())); $view->addItem($item); } return $view; } } diff --git a/src/applications/project/query/PhabricatorProjectSearchEngine.php b/src/applications/project/query/PhabricatorProjectSearchEngine.php index 8a9a228d9b..a72206ca10 100644 --- a/src/applications/project/query/PhabricatorProjectSearchEngine.php +++ b/src/applications/project/query/PhabricatorProjectSearchEngine.php @@ -1,269 +1,269 @@ setParameter( 'memberPHIDs', $this->readUsersFromRequest($request, 'members')); $saved->setParameter('status', $request->getStr('status')); $saved->setParameter('name', $request->getStr('name')); $saved->setParameter( 'icons', $this->readListFromRequest($request, 'icons')); $saved->setParameter( 'colors', $this->readListFromRequest($request, 'colors')); $this->readCustomFieldsFromRequest($request, $saved); return $saved; } public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { $query = id(new PhabricatorProjectQuery()) ->needImages(true); $member_phids = $saved->getParameter('memberPHIDs', array()); if ($member_phids && is_array($member_phids)) { $query->withMemberPHIDs($member_phids); } $status = $saved->getParameter('status'); $status = idx($this->getStatusValues(), $status); if ($status) { $query->withStatus($status); } $name = $saved->getParameter('name'); if (strlen($name)) { $query->withDatasourceQuery($name); } $icons = $saved->getParameter('icons'); if ($icons) { $query->withIcons($icons); } $colors = $saved->getParameter('colors'); if ($colors) { $query->withColors($colors); } $this->applyCustomFieldsToQuery($query, $saved); return $query; } public function buildSearchForm( AphrontFormView $form, PhabricatorSavedQuery $saved) { $phids = $saved->getParameter('memberPHIDs', array()); $member_handles = id(new PhabricatorHandleQuery()) ->setViewer($this->requireViewer()) ->withPHIDs($phids) ->execute(); $status = $saved->getParameter('status'); $name_match = $saved->getParameter('name'); $icons = array_fuse($saved->getParameter('icons', array())); $colors = array_fuse($saved->getParameter('colors', array())); $icon_control = id(new AphrontFormCheckboxControl()) ->setLabel(pht('Icons')); foreach (PhabricatorProjectIcon::getIconMap() as $icon => $name) { $image = id(new PHUIIconView()) ->setIconFont($icon); $icon_control->addCheckbox( 'icons[]', $icon, array($image, ' ', $name), isset($icons[$icon])); } $color_control = id(new AphrontFormCheckboxControl()) ->setLabel(pht('Colors')); foreach (PhabricatorProjectIcon::getColorMap() as $color => $name) { $tag = id(new PHUITagView()) ->setType(PHUITagView::TYPE_SHADE) ->setShade($color) ->setName($name); $color_control->addCheckbox( 'colors[]', $color, $tag, isset($colors[$color])); } $form ->appendChild( id(new AphrontFormTextControl()) ->setName('name') ->setLabel(pht('Name')) ->setValue($name_match)) ->appendChild( id(new AphrontFormTokenizerControl()) ->setDatasource(new PhabricatorPeopleDatasource()) ->setName('members') ->setLabel(pht('Members')) ->setValue($member_handles)) ->appendChild( id(new AphrontFormSelectControl()) ->setLabel(pht('Status')) ->setName('status') ->setOptions($this->getStatusOptions()) ->setValue($status)) ->appendChild($icon_control) ->appendChild($color_control); $this->appendCustomFieldsToForm($form, $saved); } protected function getURI($path) { return '/project/'.$path; } - public function getBuiltinQueryNames() { + protected function getBuiltinQueryNames() { $names = array(); if ($this->requireViewer()->isLoggedIn()) { $names['joined'] = pht('Joined'); } $names['active'] = pht('Active'); $names['all'] = pht('All'); return $names; } public function buildSavedQueryFromBuiltin($query_key) { $query = $this->newSavedQuery(); $query->setQueryKey($query_key); $viewer_phid = $this->requireViewer()->getPHID(); switch ($query_key) { case 'all': return $query; case 'active': return $query ->setParameter('status', 'active'); case 'joined': return $query ->setParameter('memberPHIDs', array($viewer_phid)) ->setParameter('status', 'active'); } return parent::buildSavedQueryFromBuiltin($query_key); } private function getStatusOptions() { return array( 'active' => pht('Show Only Active Projects'), 'all' => pht('Show All Projects'), ); } private function getStatusValues() { return array( 'active' => PhabricatorProjectQuery::STATUS_ACTIVE, 'all' => PhabricatorProjectQuery::STATUS_ANY, ); } private function getColorValues() {} private function getIconValues() {} protected function getRequiredHandlePHIDsForResultList( array $projects, PhabricatorSavedQuery $query) { return mpull($projects, 'getPHID'); } protected function renderResultList( array $projects, PhabricatorSavedQuery $query, array $handles) { assert_instances_of($projects, 'PhabricatorProject'); $viewer = $this->requireViewer(); $list = new PHUIObjectItemListView(); $list->setUser($viewer); $can_edit_projects = id(new PhabricatorPolicyFilter()) ->setViewer($viewer) ->requireCapabilities(array(PhabricatorPolicyCapability::CAN_EDIT)) ->apply($projects); foreach ($projects as $key => $project) { $id = $project->getID(); $workboards_uri = $this->getApplicationURI("board/{$id}/"); $members_uri = $this->getApplicationURI("members/{$id}/"); $workboards_url = phutil_tag( 'a', array( 'href' => $workboards_uri, ), pht('Workboard')); $members_class = null; $members_sigil = null; if (!isset($can_edit_projects[$key])) { $members_class = 'disabled'; $members_sigil = 'workflow'; } $members_url = javelin_tag( 'a', array( 'href' => $members_uri, 'class' => $members_class, 'sigil' => $members_sigil, ), pht('Members')); $tag_list = id(new PHUIHandleTagListView()) ->setSlim(true) ->setHandles(array($handles[$project->getPHID()])); $item = id(new PHUIObjectItemView()) ->setHeader($project->getName()) ->setHref($this->getApplicationURI("view/{$id}/")) ->setImageURI($project->getProfileImageURI()) ->addAttribute($tag_list) ->addAttribute($workboards_url) ->addAttribute($members_url); if ($project->getStatus() == PhabricatorProjectStatus::STATUS_ARCHIVED) { $item->addIcon('delete-grey', pht('Archived')); $item->setDisabled(true); } $list->addItem($item); } return $list; } } diff --git a/src/applications/releeph/query/ReleephBranchSearchEngine.php b/src/applications/releeph/query/ReleephBranchSearchEngine.php index 46e3219890..24f0a9818a 100644 --- a/src/applications/releeph/query/ReleephBranchSearchEngine.php +++ b/src/applications/releeph/query/ReleephBranchSearchEngine.php @@ -1,98 +1,98 @@ product = $product; return $this; } public function getProduct() { return $this->product; } public function buildSavedQueryFromRequest(AphrontRequest $request) { $saved = new PhabricatorSavedQuery(); $saved->setParameter('active', $request->getStr('active')); return $saved; } public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { $query = id(new ReleephBranchQuery()) ->needCutPointCommits(true) ->withProductPHIDs(array($this->getProduct()->getPHID())); $active = $saved->getParameter('active'); $value = idx($this->getActiveValues(), $active); if ($value !== null) { $query->withStatus($value); } return $query; } public function buildSearchForm( AphrontFormView $form, PhabricatorSavedQuery $saved_query) { $form->appendChild( id(new AphrontFormSelectControl()) ->setName('active') ->setLabel(pht('Show Branches')) ->setValue($saved_query->getParameter('active')) ->setOptions($this->getActiveOptions())); } protected function getURI($path) { return '/releeph/product/'.$this->getProduct()->getID().'/'.$path; } - public function getBuiltinQueryNames() { + protected function getBuiltinQueryNames() { $names = array( 'open' => pht('Open'), 'all' => pht('All'), ); return $names; } public function buildSavedQueryFromBuiltin($query_key) { $query = $this->newSavedQuery(); $query->setQueryKey($query_key); switch ($query_key) { case 'open': return $query ->setParameter('active', 'open'); case 'all': return $query; } return parent::buildSavedQueryFromBuiltin($query_key); } private function getActiveOptions() { return array( 'open' => pht('Open Branches'), 'all' => pht('Open and Closed Branches'), ); } private function getActiveValues() { return array( 'open' => ReleephBranchQuery::STATUS_OPEN, 'all' => ReleephBranchQuery::STATUS_ALL, ); } } diff --git a/src/applications/releeph/query/ReleephProductSearchEngine.php b/src/applications/releeph/query/ReleephProductSearchEngine.php index e3fe499266..e3a30c1a56 100644 --- a/src/applications/releeph/query/ReleephProductSearchEngine.php +++ b/src/applications/releeph/query/ReleephProductSearchEngine.php @@ -1,133 +1,133 @@ setParameter('active', $request->getStr('active')); return $saved; } public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { $query = id(new ReleephProductQuery()) ->setOrder(ReleephProductQuery::ORDER_NAME) ->needArcanistProjects(true); $active = $saved->getParameter('active'); $value = idx($this->getActiveValues(), $active); if ($value !== null) { $query->withActive($value); } return $query; } public function buildSearchForm( AphrontFormView $form, PhabricatorSavedQuery $saved_query) { $form->appendChild( id(new AphrontFormSelectControl()) ->setName('active') ->setLabel(pht('Show Products')) ->setValue($saved_query->getParameter('active')) ->setOptions($this->getActiveOptions())); } protected function getURI($path) { return '/releeph/project/'.$path; } - public function getBuiltinQueryNames() { + protected function getBuiltinQueryNames() { return array( 'active' => pht('Active'), 'all' => pht('All'), ); } public function buildSavedQueryFromBuiltin($query_key) { $query = $this->newSavedQuery(); $query->setQueryKey($query_key); switch ($query_key) { case 'active': return $query ->setParameter('active', 'active'); case 'all': return $query; } return parent::buildSavedQueryFromBuiltin($query_key); } private function getActiveOptions() { return array( 'all' => pht('Active and Inactive Products'), 'active' => pht('Active Prodcuts'), 'inactive' => pht('Inactive Products'), ); } private function getActiveValues() { return array( 'all' => null, 'active' => 1, 'inactive' => 0, ); } protected function renderResultList( array $products, PhabricatorSavedQuery $query, array $handles) { assert_instances_of($products, 'ReleephProject'); $viewer = $this->requireViewer(); $list = id(new PHUIObjectItemListView()) ->setUser($viewer); foreach ($products as $product) { $id = $product->getID(); $item = id(new PHUIObjectItemView()) ->setHeader($product->getName()) ->setHref($this->getApplicationURI("product/{$id}/")); if (!$product->getIsActive()) { $item->setDisabled(true); $item->addIcon('none', pht('Inactive')); } $repo = $product->getRepository(); $item->addAttribute( phutil_tag( 'a', array( 'href' => '/diffusion/'.$repo->getCallsign().'/', ), 'r'.$repo->getCallsign())); $arc = $product->getArcanistProject(); if ($arc) { $item->addAttribute($arc->getName()); } $list->addItem($item); } return $list; } } diff --git a/src/applications/releeph/query/ReleephRequestSearchEngine.php b/src/applications/releeph/query/ReleephRequestSearchEngine.php index 072bb334ef..35ebb3c202 100644 --- a/src/applications/releeph/query/ReleephRequestSearchEngine.php +++ b/src/applications/releeph/query/ReleephRequestSearchEngine.php @@ -1,175 +1,175 @@ branch = $branch; return $this; } public function getBranch() { return $this->branch; } public function setBaseURI($base_uri) { $this->baseURI = $base_uri; return $this; } public function buildSavedQueryFromRequest(AphrontRequest $request) { $saved = new PhabricatorSavedQuery(); $saved->setParameter('status', $request->getStr('status')); $saved->setParameter('severity', $request->getStr('severity')); $saved->setParameter( 'requestorPHIDs', $this->readUsersFromRequest($request, 'requestors')); return $saved; } public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { $query = id(new ReleephRequestQuery()) ->withBranchIDs(array($this->getBranch()->getID())); $status = $saved->getParameter('status'); $status = idx($this->getStatusValues(), $status); if ($status) { $query->withStatus($status); } $severity = $saved->getParameter('severity'); if ($severity) { $query->withSeverities(array($severity)); } $requestor_phids = $saved->getParameter('requestorPHIDs'); if ($requestor_phids) { $query->withRequestorPHIDs($requestor_phids); } return $query; } public function buildSearchForm( AphrontFormView $form, PhabricatorSavedQuery $saved_query) { $phids = $saved_query->getParameter('requestorPHIDs', array()); $requestor_handles = id(new PhabricatorHandleQuery()) ->setViewer($this->requireViewer()) ->withPHIDs($phids) ->execute(); $form ->appendChild( id(new AphrontFormSelectControl()) ->setName('status') ->setLabel(pht('Status')) ->setValue($saved_query->getParameter('status')) ->setOptions($this->getStatusOptions())) ->appendChild( id(new AphrontFormSelectControl()) ->setName('severity') ->setLabel(pht('Severity')) ->setValue($saved_query->getParameter('severity')) ->setOptions($this->getSeverityOptions())) ->appendChild( id(new AphrontFormTokenizerControl()) ->setDatasource(new PhabricatorPeopleDatasource()) ->setName('requestors') ->setLabel(pht('Requestors')) ->setValue($requestor_handles)); } protected function getURI($path) { return $this->baseURI.$path; } - public function getBuiltinQueryNames() { + protected function getBuiltinQueryNames() { $names = array( 'open' => pht('Open Requests'), 'all' => pht('All Requests'), ); if ($this->requireViewer()->isLoggedIn()) { $names['requested'] = pht('Requested'); } return $names; } public function buildSavedQueryFromBuiltin($query_key) { $query = $this->newSavedQuery(); $query->setQueryKey($query_key); switch ($query_key) { case 'open': return $query->setParameter('status', 'open'); case 'all': return $query; case 'requested': return $query->setParameter( 'requestorPHIDs', array($this->requireViewer()->getPHID())); } return parent::buildSavedQueryFromBuiltin($query_key); } private function getStatusOptions() { return array( '' => pht('(All Requests)'), 'open' => pht('Open Requests'), 'requested' => pht('Pull Requested'), 'needs-pull' => pht('Needs Pull'), 'rejected' => pht('Rejected'), 'abandoned' => pht('Abandoned'), 'pulled' => pht('Pulled'), 'needs-revert' => pht('Needs Revert'), 'reverted' => pht('Reverted'), ); } private function getStatusValues() { return array( 'open' => ReleephRequestQuery::STATUS_OPEN, 'requested' => ReleephRequestQuery::STATUS_REQUESTED, 'needs-pull' => ReleephRequestQuery::STATUS_NEEDS_PULL, 'rejected' => ReleephRequestQuery::STATUS_REJECTED, 'abandoned' => ReleephRequestQuery::STATUS_ABANDONED, 'pulled' => ReleephRequestQuery::STATUS_PULLED, 'needs-revert' => ReleephRequestQuery::STATUS_NEEDS_REVERT, 'reverted' => ReleephRequestQuery::STATUS_REVERTED, ); } private function getSeverityOptions() { if (ReleephDefaultFieldSelector::isFacebook()) { return array( '' => pht('(All Severities)'), 11 => 'HOTFIX', 12 => 'PIGGYBACK', 13 => 'RELEASE', 14 => 'DAILY', 15 => 'PARKING', ); } else { return array( '' => pht('(All Severities)'), ReleephSeverityFieldSpecification::HOTFIX => pht('Hotfix'), ReleephSeverityFieldSpecification::RELEASE => pht('Release'), ); } } } diff --git a/src/applications/repository/query/PhabricatorRepositoryPushLogSearchEngine.php b/src/applications/repository/query/PhabricatorRepositoryPushLogSearchEngine.php index 9e73330dab..68fc754a40 100644 --- a/src/applications/repository/query/PhabricatorRepositoryPushLogSearchEngine.php +++ b/src/applications/repository/query/PhabricatorRepositoryPushLogSearchEngine.php @@ -1,134 +1,134 @@ setParameter( 'repositoryPHIDs', $this->readPHIDsFromRequest( $request, 'repositories', array( PhabricatorRepositoryRepositoryPHIDType::TYPECONST, ))); $saved->setParameter( 'pusherPHIDs', $this->readUsersFromRequest( $request, 'pushers')); return $saved; } public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { $query = id(new PhabricatorRepositoryPushLogQuery()); $repository_phids = $saved->getParameter('repositoryPHIDs'); if ($repository_phids) { $query->withRepositoryPHIDs($repository_phids); } $pusher_phids = $saved->getParameter('pusherPHIDs'); if ($pusher_phids) { $query->withPusherPHIDs($pusher_phids); } return $query; } public function buildSearchForm( AphrontFormView $form, PhabricatorSavedQuery $saved_query) { $repository_phids = $saved_query->getParameter('repositoryPHIDs', array()); $pusher_phids = $saved_query->getParameter('pusherPHIDs', array()); $all_phids = array_merge( $repository_phids, $pusher_phids); if ($all_phids) { $handles = id(new PhabricatorHandleQuery()) ->setViewer($this->requireViewer()) ->withPHIDs($all_phids) ->execute(); } else { $handles = array(); } $repository_handles = array_select_keys($handles, $repository_phids); $pusher_handles = array_select_keys($handles, $pusher_phids); $form ->appendChild( id(new AphrontFormTokenizerControl()) ->setDatasource(new DiffusionRepositoryDatasource()) ->setName('repositories') ->setLabel(pht('Repositories')) ->setValue($repository_handles)) ->appendChild( id(new AphrontFormTokenizerControl()) ->setDatasource(new PhabricatorPeopleDatasource()) ->setName('pushers') ->setLabel(pht('Pushers')) ->setValue($pusher_handles)); } protected function getURI($path) { return '/diffusion/pushlog/'.$path; } - public function getBuiltinQueryNames() { + protected function getBuiltinQueryNames() { return array( 'all' => pht('All Push Logs'), ); } public function buildSavedQueryFromBuiltin($query_key) { $query = $this->newSavedQuery(); $query->setQueryKey($query_key); switch ($query_key) { case 'all': return $query; } return parent::buildSavedQueryFromBuiltin($query_key); } protected function getRequiredHandlePHIDsForResultList( array $logs, PhabricatorSavedQuery $query) { return mpull($logs, 'getPusherPHID'); } protected function renderResultList( array $logs, PhabricatorSavedQuery $query, array $handles) { $table = id(new DiffusionPushLogListView()) ->setUser($this->requireViewer()) ->setHandles($handles) ->setLogs($logs); $box = id(new PHUIBoxView()) ->addMargin(PHUI::MARGIN_LARGE) ->appendChild($table); return $box; } } diff --git a/src/applications/repository/query/PhabricatorRepositorySearchEngine.php b/src/applications/repository/query/PhabricatorRepositorySearchEngine.php index d665ae3e04..90b1afaa5d 100644 --- a/src/applications/repository/query/PhabricatorRepositorySearchEngine.php +++ b/src/applications/repository/query/PhabricatorRepositorySearchEngine.php @@ -1,305 +1,305 @@ setParameter('callsigns', $request->getStrList('callsigns')); $saved->setParameter('status', $request->getStr('status')); $saved->setParameter('order', $request->getStr('order')); $saved->setParameter('hosted', $request->getStr('hosted')); $saved->setParameter('types', $request->getArr('types')); $saved->setParameter('name', $request->getStr('name')); $saved->setParameter('anyProjectPHIDs', $request->getArr('anyProjects')); return $saved; } public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { $query = id(new PhabricatorRepositoryQuery()) ->needProjectPHIDs(true) ->needCommitCounts(true) ->needMostRecentCommits(true); $callsigns = $saved->getParameter('callsigns'); if ($callsigns) { $query->withCallsigns($callsigns); } $status = $saved->getParameter('status'); $status = idx($this->getStatusValues(), $status); if ($status) { $query->withStatus($status); } $order = $saved->getParameter('order'); $order = idx($this->getOrderValues(), $order); if ($order) { $query->setOrder($order); } else { $query->setOrder(head($this->getOrderValues())); } $hosted = $saved->getParameter('hosted'); $hosted = idx($this->getHostedValues(), $hosted); if ($hosted) { $query->withHosted($hosted); } $types = $saved->getParameter('types'); if ($types) { $query->withTypes($types); } $name = $saved->getParameter('name'); if (strlen($name)) { $query->withNameContains($name); } $any_project_phids = $saved->getParameter('anyProjectPHIDs'); if ($any_project_phids) { $query->withAnyProjects($any_project_phids); } return $query; } public function buildSearchForm( AphrontFormView $form, PhabricatorSavedQuery $saved_query) { $callsigns = $saved_query->getParameter('callsigns', array()); $types = $saved_query->getParameter('types', array()); $types = array_fuse($types); $name = $saved_query->getParameter('name'); $any_project_phids = $saved_query->getParameter('anyProjectPHIDs', array()); if ($any_project_phids) { $any_project_handles = id(new PhabricatorHandleQuery()) ->setViewer($this->requireViewer()) ->withPHIDs($any_project_phids) ->execute(); } else { $any_project_handles = array(); } $form ->appendChild( id(new AphrontFormTextControl()) ->setName('callsigns') ->setLabel(pht('Callsigns')) ->setValue(implode(', ', $callsigns))) ->appendChild( id(new AphrontFormTextControl()) ->setName('name') ->setLabel(pht('Name Contains')) ->setValue($name)) ->appendChild( id(new AphrontFormTokenizerControl()) ->setDatasource(new PhabricatorProjectDatasource()) ->setName('anyProjects') ->setLabel(pht('In Any Project')) ->setValue($any_project_handles)) ->appendChild( id(new AphrontFormSelectControl()) ->setName('status') ->setLabel(pht('Status')) ->setValue($saved_query->getParameter('status')) ->setOptions($this->getStatusOptions())) ->appendChild( id(new AphrontFormSelectControl()) ->setName('hosted') ->setLabel(pht('Hosted')) ->setValue($saved_query->getParameter('hosted')) ->setOptions($this->getHostedOptions())); $type_control = id(new AphrontFormCheckboxControl()) ->setLabel(pht('Types')); $all_types = PhabricatorRepositoryType::getAllRepositoryTypes(); foreach ($all_types as $key => $name) { $type_control->addCheckbox( 'types[]', $key, $name, isset($types[$key])); } $form ->appendChild($type_control) ->appendChild( id(new AphrontFormSelectControl()) ->setName('order') ->setLabel(pht('Order')) ->setValue($saved_query->getParameter('order')) ->setOptions($this->getOrderOptions())); } protected function getURI($path) { return '/diffusion/'.$path; } - public function getBuiltinQueryNames() { + protected function getBuiltinQueryNames() { $names = array( 'active' => pht('Active Repositories'), 'all' => pht('All Repositories'), ); return $names; } public function buildSavedQueryFromBuiltin($query_key) { $query = $this->newSavedQuery(); $query->setQueryKey($query_key); switch ($query_key) { case 'active': return $query->setParameter('status', 'open'); case 'all': return $query; } return parent::buildSavedQueryFromBuiltin($query_key); } private function getStatusOptions() { return array( '' => pht('Active and Inactive Repositories'), 'open' => pht('Active Repositories'), 'closed' => pht('Inactive Repositories'), ); } private function getStatusValues() { return array( '' => PhabricatorRepositoryQuery::STATUS_ALL, 'open' => PhabricatorRepositoryQuery::STATUS_OPEN, 'closed' => PhabricatorRepositoryQuery::STATUS_CLOSED, ); } private function getOrderOptions() { return array( 'committed' => pht('Most Recent Commit'), 'name' => pht('Name'), 'callsign' => pht('Callsign'), 'created' => pht('Date Created'), ); } private function getOrderValues() { return array( 'committed' => PhabricatorRepositoryQuery::ORDER_COMMITTED, 'name' => PhabricatorRepositoryQuery::ORDER_NAME, 'callsign' => PhabricatorRepositoryQuery::ORDER_CALLSIGN, 'created' => PhabricatorRepositoryQuery::ORDER_CREATED, ); } private function getHostedOptions() { return array( '' => pht('Hosted and Remote Repositories'), 'phabricator' => pht('Hosted Repositories'), 'remote' => pht('Remote Repositories'), ); } private function getHostedValues() { return array( '' => PhabricatorRepositoryQuery::HOSTED_ALL, 'phabricator' => PhabricatorRepositoryQuery::HOSTED_PHABRICATOR, 'remote' => PhabricatorRepositoryQuery::HOSTED_REMOTE, ); } protected function getRequiredHandlePHIDsForResultList( array $repositories, PhabricatorSavedQuery $query) { return array_mergev(mpull($repositories, 'getProjectPHIDs')); } protected function renderResultList( array $repositories, PhabricatorSavedQuery $query, array $handles) { assert_instances_of($repositories, 'PhabricatorRepository'); $viewer = $this->requireViewer();; $list = new PHUIObjectItemListView(); foreach ($repositories as $repository) { $id = $repository->getID(); $item = id(new PHUIObjectItemView()) ->setUser($viewer) ->setHeader($repository->getName()) ->setObjectName('r'.$repository->getCallsign()) ->setHref($this->getApplicationURI($repository->getCallsign().'/')); $commit = $repository->getMostRecentCommit(); if ($commit) { $commit_link = DiffusionView::linkCommit( $repository, $commit->getCommitIdentifier(), $commit->getSummary()); $item->setSubhead($commit_link); $item->setEpoch($commit->getEpoch()); } $item->addIcon( 'none', PhabricatorRepositoryType::getNameForRepositoryType( $repository->getVersionControlSystem())); $size = $repository->getCommitCount(); if ($size) { $history_uri = DiffusionRequest::generateDiffusionURI( array( 'callsign' => $repository->getCallsign(), 'action' => 'history', )); $item->addAttribute( phutil_tag( 'a', array( 'href' => $history_uri, ), pht('%s Commit(s)', new PhutilNumber($size)))); } else { $item->addAttribute(pht('No Commits')); } $project_handles = array_select_keys( $handles, $repository->getProjectPHIDs()); if ($project_handles) { $item->addAttribute( id(new PHUIHandleTagListView()) ->setSlim(true) ->setHandles($project_handles)); } if (!$repository->isTracked()) { $item->setDisabled(true); $item->addIcon('disable-grey', pht('Inactive')); } $list->addItem($item); } return $list; } } diff --git a/src/applications/search/query/PhabricatorSearchApplicationSearchEngine.php b/src/applications/search/query/PhabricatorSearchApplicationSearchEngine.php index b56a3466fd..f810dcb76b 100644 --- a/src/applications/search/query/PhabricatorSearchApplicationSearchEngine.php +++ b/src/applications/search/query/PhabricatorSearchApplicationSearchEngine.php @@ -1,283 +1,283 @@ setParameter('query', $request->getStr('query')); $saved->setParameter( 'statuses', $this->readListFromRequest($request, 'statuses')); $saved->setParameter( 'types', $this->readListFromRequest($request, 'types')); $saved->setParameter( 'authorPHIDs', $this->readUsersFromRequest($request, 'authorPHIDs')); $saved->setParameter( 'ownerPHIDs', $this->readUsersFromRequest($request, 'ownerPHIDs')); $saved->setParameter( 'withUnowned', $this->readBoolFromRequest($request, 'withUnowned')); $saved->setParameter( 'subscriberPHIDs', $this->readPHIDsFromRequest($request, 'subscriberPHIDs')); $saved->setParameter( 'projectPHIDs', $this->readPHIDsFromRequest($request, 'projectPHIDs')); return $saved; } public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { $query = id(new PhabricatorSearchDocumentQuery()) ->withSavedQuery($saved); return $query; } public function buildSearchForm( AphrontFormView $form, PhabricatorSavedQuery $saved) { $options = array(); $author_value = null; $owner_value = null; $subscribers_value = null; $project_value = null; $author_phids = $saved->getParameter('authorPHIDs', array()); $owner_phids = $saved->getParameter('ownerPHIDs', array()); $subscriber_phids = $saved->getParameter('subscriberPHIDs', array()); $project_phids = $saved->getParameter('projectPHIDs', array()); $all_phids = array_merge( $author_phids, $owner_phids, $subscriber_phids, $project_phids); $all_handles = id(new PhabricatorHandleQuery()) ->setViewer($this->requireViewer()) ->withPHIDs($all_phids) ->execute(); $author_handles = array_select_keys($all_handles, $author_phids); $owner_handles = array_select_keys($all_handles, $owner_phids); $subscriber_handles = array_select_keys($all_handles, $subscriber_phids); $project_handles = array_select_keys($all_handles, $project_phids); $with_unowned = $saved->getParameter('withUnowned', array()); $status_values = $saved->getParameter('statuses', array()); $status_values = array_fuse($status_values); $statuses = array( PhabricatorSearchRelationship::RELATIONSHIP_OPEN => pht('Open'), PhabricatorSearchRelationship::RELATIONSHIP_CLOSED => pht('Closed'), ); $status_control = id(new AphrontFormCheckboxControl()) ->setLabel(pht('Document Status')); foreach ($statuses as $status => $name) { $status_control->addCheckbox( 'statuses[]', $status, $name, isset($status_values[$status])); } $type_values = $saved->getParameter('types', array()); $type_values = array_fuse($type_values); $types = self::getIndexableDocumentTypes($this->requireViewer()); $types_control = id(new AphrontFormCheckboxControl()) ->setLabel(pht('Document Types')); foreach ($types as $type => $name) { $types_control->addCheckbox( 'types[]', $type, $name, isset($type_values[$type])); } $form ->appendChild( phutil_tag( 'input', array( 'type' => 'hidden', 'name' => 'jump', 'value' => 'no', ))) ->appendChild( id(new AphrontFormTextControl()) ->setLabel('Query') ->setName('query') ->setValue($saved->getParameter('query'))) ->appendChild($status_control) ->appendChild($types_control) ->appendChild( id(new AphrontFormTokenizerControl()) ->setName('authorPHIDs') ->setLabel('Authors') ->setDatasource(new PhabricatorPeopleDatasource()) ->setValue($author_handles)) ->appendChild( id(new AphrontFormTokenizerControl()) ->setName('ownerPHIDs') ->setLabel('Owners') ->setDatasource(new PhabricatorTypeaheadOwnerDatasource()) ->setValue($owner_handles)) ->appendChild( id(new AphrontFormCheckboxControl()) ->addCheckbox( 'withUnowned', 1, pht('Show only unowned documents.'), $with_unowned)) ->appendChild( id(new AphrontFormTokenizerControl()) ->setName('subscriberPHIDs') ->setLabel('Subscribers') ->setDatasource(new PhabricatorPeopleDatasource()) ->setValue($subscriber_handles)) ->appendChild( id(new AphrontFormTokenizerControl()) ->setName('projectPHIDs') ->setLabel('In Any Project') ->setDatasource(new PhabricatorProjectDatasource()) ->setValue($project_handles)); } protected function getURI($path) { return '/search/'.$path; } - public function getBuiltinQueryNames() { + protected function getBuiltinQueryNames() { return array( 'all' => pht('All Documents'), 'open' => pht('Open Documents'), 'open-tasks' => pht('Open Tasks'), ); } public function buildSavedQueryFromBuiltin($query_key) { $query = $this->newSavedQuery(); $query->setQueryKey($query_key); switch ($query_key) { case 'all': return $query; case 'open': return $query->setParameter('statuses', array('open')); case 'open-tasks': return $query ->setParameter('statuses', array('open')) ->setParameter('types', array(ManiphestTaskPHIDType::TYPECONST)); } return parent::buildSavedQueryFromBuiltin($query_key); } public static function getIndexableDocumentTypes( PhabricatorUser $viewer = null) { // TODO: This is inelegant and not very efficient, but gets us reasonable // results. It would be nice to do this more elegantly. $indexers = id(new PhutilSymbolLoader()) ->setAncestorClass('PhabricatorSearchDocumentIndexer') ->loadObjects(); if ($viewer) { $types = PhabricatorPHIDType::getAllInstalledTypes($viewer); } else { $types = PhabricatorPHIDType::getAllTypes(); } $results = array(); foreach ($types as $type) { $typeconst = $type->getTypeConstant(); foreach ($indexers as $indexer) { $fake_phid = 'PHID-'.$typeconst.'-fake'; if ($indexer->shouldIndexDocumentByPHID($fake_phid)) { $results[$typeconst] = $type->getTypeName(); } } } asort($results); // Put tasks first, see T4606. $results = array_select_keys( $results, array( ManiphestTaskPHIDType::TYPECONST, )) + $results; return $results; } public function shouldUseOffsetPaging() { return true; } protected function renderResultList( array $results, PhabricatorSavedQuery $query, array $handles) { $viewer = $this->requireViewer(); if ($results) { $objects = id(new PhabricatorObjectQuery()) ->setViewer($viewer) ->withPHIDs(mpull($results, 'getPHID')) ->execute(); $output = array(); foreach ($results as $phid => $handle) { $view = id(new PhabricatorSearchResultView()) ->setHandle($handle) ->setQuery($query) ->setObject(idx($objects, $phid)); $output[] = $view->render(); } $results = phutil_tag_div( 'phabricator-search-result-list', $output); } else { $results = phutil_tag_div( 'phabricator-search-result-list', phutil_tag( 'p', array('class' => 'phabricator-search-no-results'), pht('No search results.'))); } return id(new PHUIBoxView()) ->addMargin(PHUI::MARGIN_LARGE) ->addPadding(PHUI::PADDING_LARGE) ->setBorder(true) ->appendChild($results) ->addClass('phabricator-search-result-box'); } } diff --git a/src/applications/slowvote/query/PhabricatorSlowvoteSearchEngine.php b/src/applications/slowvote/query/PhabricatorSlowvoteSearchEngine.php index 79a4ea75de..25f5e59f60 100644 --- a/src/applications/slowvote/query/PhabricatorSlowvoteSearchEngine.php +++ b/src/applications/slowvote/query/PhabricatorSlowvoteSearchEngine.php @@ -1,173 +1,173 @@ setParameter( 'authorPHIDs', $this->readUsersFromRequest($request, 'authors')); $saved->setParameter('voted', $request->getBool('voted')); $saved->setParameter('statuses', $request->getArr('statuses')); return $saved; } public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { $query = id(new PhabricatorSlowvoteQuery()) ->withAuthorPHIDs($saved->getParameter('authorPHIDs', array())); if ($saved->getParameter('voted')) { $query->withVotesByViewer(true); } $statuses = $saved->getParameter('statuses', array()); if (count($statuses) == 1) { $status = head($statuses); if ($status == 'open') { $query->withIsClosed(false); } else { $query->withIsClosed(true); } } return $query; } public function buildSearchForm( AphrontFormView $form, PhabricatorSavedQuery $saved_query) { $phids = $saved_query->getParameter('authorPHIDs', array()); $author_handles = id(new PhabricatorHandleQuery()) ->setViewer($this->requireViewer()) ->withPHIDs($phids) ->execute(); $voted = $saved_query->getParameter('voted', false); $statuses = $saved_query->getParameter('statuses', array()); $form ->appendChild( id(new AphrontFormTokenizerControl()) ->setDatasource(new PhabricatorPeopleDatasource()) ->setName('authors') ->setLabel(pht('Authors')) ->setValue($author_handles)) ->appendChild( id(new AphrontFormCheckboxControl()) ->addCheckbox( 'voted', 1, pht("Show only polls I've voted in."), $voted)) ->appendChild( id(new AphrontFormCheckboxControl()) ->setLabel(pht('Status')) ->addCheckbox( 'statuses[]', 'open', pht('Open'), in_array('open', $statuses)) ->addCheckbox( 'statuses[]', 'closed', pht('Closed'), in_array('closed', $statuses))); } protected function getURI($path) { return '/vote/'.$path; } - public function getBuiltinQueryNames() { + protected function getBuiltinQueryNames() { $names = array( 'open' => pht('Open Polls'), 'all' => pht('All Polls'), ); if ($this->requireViewer()->isLoggedIn()) { $names['authored'] = pht('Authored'); $names['voted'] = pht('Voted In'); } return $names; } public function buildSavedQueryFromBuiltin($query_key) { $query = $this->newSavedQuery(); $query->setQueryKey($query_key); switch ($query_key) { case 'open': return $query->setParameter('statuses', array('open')); case 'all': return $query; case 'authored': return $query->setParameter( 'authorPHIDs', array($this->requireViewer()->getPHID())); case 'voted': return $query->setParameter('voted', true); } return parent::buildSavedQueryFromBuiltin($query_key); } - public function getRequiredHandlePHIDsForResultList( + protected function getRequiredHandlePHIDsForResultList( array $polls, PhabricatorSavedQuery $query) { return mpull($polls, 'getAuthorPHID'); } protected function renderResultList( array $polls, PhabricatorSavedQuery $query, array $handles) { assert_instances_of($polls, 'PhabricatorSlowvotePoll'); $viewer = $this->requireViewer(); $list = id(new PHUIObjectItemListView()) ->setUser($viewer); $phids = mpull($polls, 'getAuthorPHID'); foreach ($polls as $poll) { $date_created = phabricator_datetime($poll->getDateCreated(), $viewer); if ($poll->getAuthorPHID()) { $author = $handles[$poll->getAuthorPHID()]->renderLink(); } else { $author = null; } $item = id(new PHUIObjectItemView()) ->setObjectName('V'.$poll->getID()) ->setHeader($poll->getQuestion()) ->setHref('/V'.$poll->getID()) ->setDisabled($poll->getIsClosed()) ->addIcon('none', $date_created); $description = $poll->getDescription(); if (strlen($description)) { $item->addAttribute(id(new PhutilUTF8StringTruncator()) ->setMaximumGlyphs(120) ->truncateString($poll->getDescription())); } if ($author) { $item->addByline(pht('Author: %s', $author)); } $list->addItem($item); } return $list; } }