Page MenuHomestyx hydra

No OneTemporary

diff --git a/src/applications/paste/controller/PhabricatorPasteController.php b/src/applications/paste/controller/PhabricatorPasteController.php
index 7581c5f39d..45371dcbb6 100644
--- a/src/applications/paste/controller/PhabricatorPasteController.php
+++ b/src/applications/paste/controller/PhabricatorPasteController.php
@@ -1,59 +1,68 @@
<?php
abstract class PhabricatorPasteController extends PhabricatorController {
- public function buildSideNavView($filter = null, $for_app = false) {
+ public function buildSideNavView($for_app = false) {
$user = $this->getRequest()->getUser();
$nav = new AphrontSideNavFilterView();
- $nav->setBaseURI(new PhutilURI($this->getApplicationURI('filter/')));
+ $nav->setBaseURI(new PhutilURI($this->getApplicationURI()));
if ($for_app) {
- $nav->addFilter('', pht('Create Paste'),
- $this->getApplicationURI('/create/'));
+ $nav->addFilter('create', pht('Create Paste'));
}
- $nav->addLabel(pht('Filters'));
- $nav->addFilter('all', pht('All Pastes'));
+ $nav->addLabel(pht('Queries'));
+
+ $named_queries = id(new PhabricatorNamedQueryQuery())
+ ->setViewer($user)
+ ->withUserPHIDs(array($user->getPHID()))
+ ->withEngineClassNames(array('PhabricatorPasteSearchEngine'))
+ ->execute();
+
+ foreach ($named_queries as $query) {
+ $nav->addFilter('query/'.$query->getQueryKey(), $query->getQueryName());
+ }
+
+ $nav->addFilter('filter/all', pht('All Pastes'));
if ($user->isLoggedIn()) {
- $nav->addFilter('my', pht('My Pastes'));
+ $nav->addFilter('filter/my', pht('My Pastes'));
}
+ $nav->addFilter('savedqueries', pht('Edit Queries...'));
$nav->addLabel(pht('Search'));
- $nav->addFilter('advanced', pht('Advanced Search'));
- $nav->addFilter('', pht('Saved Queries'),
- $this->getApplicationURI('/savedqueries/'));
+ $nav->addFilter('filter/advanced', pht('Advanced Search'));
- $nav->selectFilter($filter, 'all');
+ $nav->selectFilter(null);
return $nav;
}
public function buildApplicationMenu() {
- return $this->buildSideNavView(null, true)->getMenu();
+ return $this->buildSideNavView(true)->getMenu();
}
public function buildApplicationCrumbs() {
$crumbs = parent::buildApplicationCrumbs();
$crumbs->addAction(
id(new PhabricatorMenuItemView())
->setName(pht('Create Paste'))
->setHref($this->getApplicationURI('create/'))
->setIcon('create'));
return $crumbs;
}
public function buildSourceCodeView(
PhabricatorPaste $paste,
$max_lines = null) {
$lines = phutil_split_lines($paste->getContent());
return id(new PhabricatorSourceCodeView())
->setLimit($max_lines)
->setLines($lines);
}
}
diff --git a/src/applications/paste/controller/PhabricatorPasteListController.php b/src/applications/paste/controller/PhabricatorPasteListController.php
index 8693319395..e0f3d15d80 100644
--- a/src/applications/paste/controller/PhabricatorPasteListController.php
+++ b/src/applications/paste/controller/PhabricatorPasteListController.php
@@ -1,148 +1,150 @@
<?php
final class PhabricatorPasteListController extends PhabricatorPasteController {
public function shouldRequireLogin() {
return false;
}
private $filter;
private $queryKey;
public function willProcessRequest(array $data) {
$this->filter = idx($data, 'filter');
$this->queryKey = idx($data, 'queryKey');
}
public function processRequest() {
$request = $this->getRequest();
$user = $request->getUser();
if ($request->isFormPost()) {
$saved = id(new PhabricatorPasteSearchEngine())
->buildSavedQueryFromRequest($request);
if (count($saved->getParameter('authorPHIDs')) == 0) {
return id(new AphrontRedirectResponse())
->setURI('/paste/filter/advanced/');
}
return id(new AphrontRedirectResponse())
->setURI('/paste/query/'.$saved->getQueryKey().'/');
}
- $nav = $this->buildSideNavView($this->filter);
- $filter = $nav->getSelectedFilter();
-
- $saved_query = new PhabricatorSavedQuery();
+ $nav = $this->buildSideNavView();
$engine = id(new PhabricatorPasteSearchEngine())
- ->setPasteSearchFilter($filter)
->setPasteSearchUser($request->getUser());
if ($this->queryKey !== null) {
$saved_query = id(new PhabricatorSavedQuery())->loadOneWhere(
'queryKey = %s',
$this->queryKey);
if (!$saved_query) {
return new Aphront404Response();
}
$query = id(new PhabricatorPasteSearchEngine())
->buildQueryFromSavedQuery($saved_query);
+
+ $nav->selectFilter('query/'.$this->queryKey);
+ $filter = null;
} else {
+ $filter = $nav->selectFilter('filter/'.$this->filter);
+ $engine->setPasteSearchFilter($filter);
+
$saved_query = $engine->buildSavedQueryFromRequest($request);
$query = $engine->buildQueryFromSavedQuery($saved_query);
}
$pager = new AphrontCursorPagerView();
$pager->readFromRequest($request);
$pastes = $query->setViewer($request->getUser())
->needContent(true)
->executeWithCursorPager($pager);
$list = $this->buildPasteList($pastes);
$list->setPager($pager);
$list->setNoDataString(pht("No results found for this query."));
- if ($this->queryKey !== null || $filter == "advanced") {
+ if ($this->queryKey !== null || $filter == "filter/advanced") {
$form = $engine->buildSearchForm($saved_query);
$nav->appendChild(
array(
$form
));
}
$nav->appendChild(
array(
$list,
));
$crumbs = $this
->buildApplicationCrumbs($nav)
->addCrumb(
id(new PhabricatorCrumbView())
->setName(pht("Pastes"))
->setHref($this->getApplicationURI('filter/'.$filter.'/')));
$nav->setCrumbs($crumbs);
return $this->buildApplicationPage(
$nav,
array(
'title' => pht("Pastes"),
'device' => true,
'dust' => true,
));
}
private function buildPasteList(array $pastes) {
assert_instances_of($pastes, 'PhabricatorPaste');
$user = $this->getRequest()->getUser();
$this->loadHandles(mpull($pastes, 'getAuthorPHID'));
$lang_map = PhabricatorEnv::getEnvConfig('pygments.dropdown-choices');
$list = new PhabricatorObjectItemListView();
$list->setUser($user);
foreach ($pastes as $paste) {
$created = phabricator_date($paste->getDateCreated(), $user);
$author = $this->getHandle($paste->getAuthorPHID())->renderLink();
$source_code = $this->buildSourceCodeView($paste, 5)->render();
$source_code = phutil_tag(
'div',
array(
'class' => 'phabricator-source-code-summary',
),
$source_code);
$line_count = count(explode("\n", $paste->getContent()));
$line_count = pht(
'%s Line(s)',
new PhutilNumber($line_count));
$title = nonempty($paste->getTitle(), pht('(An Untitled Masterwork)'));
$item = id(new PhabricatorObjectItemView())
->setObjectName('P'.$paste->getID())
->setHeader($title)
->setHref('/P'.$paste->getID())
->setObject($paste)
->addByline(pht('Author: %s', $author))
->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/paste/controller/PhabricatorPasteQueriesController.php b/src/applications/paste/controller/PhabricatorPasteQueriesController.php
index feb47c9ddd..5bafa4a821 100644
--- a/src/applications/paste/controller/PhabricatorPasteQueriesController.php
+++ b/src/applications/paste/controller/PhabricatorPasteQueriesController.php
@@ -1,60 +1,60 @@
<?php
final class PhabricatorPasteQueriesController
extends PhabricatorPasteController {
public function processRequest() {
$request = $this->getRequest();
$user = $request->getUser();
- $nav = $this->buildSideNavView("");
- $filter = $nav->getSelectedFilter();
+ $nav = $this->buildSideNavView();
+ $nav->selectFilter('savedqueries');
$named_queries = id(new PhabricatorNamedQueryQuery())
->setViewer($user)
->withUserPHIDs(array($user->getPHID()))
->withEngineClassNames(array('PhabricatorPasteSearchEngine'))
->execute();
$list = new PhabricatorObjectItemListView();
$list->setUser($user);
foreach ($named_queries as $named_query) {
$date_created = phabricator_datetime(
$named_query->getDateCreated(),
$user);
$item = id(new PhabricatorObjectItemView())
->setHeader($named_query->getQueryName())
->setHref('/paste/query/'.$named_query->getQueryKey().'/')
->addIcon('none', $date_created);
$list->addItem($item);
}
$list->setNoDataString(pht("No results found for this query."));
$nav->appendChild(
array(
$list,
));
$crumbs = $this
->buildApplicationCrumbs($nav)
->addCrumb(
id(new PhabricatorCrumbView())
->setName(pht("Saved Queries"))
->setHref($this->getApplicationURI('/savedqueries/')));
$nav->setCrumbs($crumbs);
return $this->buildApplicationPage(
$nav,
array(
'title' => pht("Saved Queries"),
'device' => true,
'dust' => true,
));
}
}
diff --git a/src/applications/paste/query/PhabricatorPasteSearchEngine.php b/src/applications/paste/query/PhabricatorPasteSearchEngine.php
index d342d666f3..51c18e81f8 100644
--- a/src/applications/paste/query/PhabricatorPasteSearchEngine.php
+++ b/src/applications/paste/query/PhabricatorPasteSearchEngine.php
@@ -1,108 +1,108 @@
<?php
/**
* Provides search functionality for the paste application.
*
* @group search
*/
final class PhabricatorPasteSearchEngine
extends PhabricatorApplicationSearchEngine {
protected $filter;
protected $user;
/**
* Create a saved query object from the request.
*
* @param AphrontRequest The search request.
* @return The saved query that is built.
*/
public function buildSavedQueryFromRequest(AphrontRequest $request) {
$saved = new PhabricatorSavedQuery();
- if ($this->filter == "my") {
+ if ($this->filter == "filter/my") {
$user = $request->getUser();
$saved->setParameter('authorPHIDs', array($user->getPHID()));
} else {
$data = $request->getRequestData();
if (array_key_exists('set_users', $data)) {
$saved->setParameter('authorPHIDs', $data['set_users']);
}
}
try {
$unguarded = AphrontWriteGuard::beginScopedUnguardedWrites();
$saved->save();
unset($unguarded);
} catch (AphrontQueryDuplicateKeyException $ex) {
// Ignore, this is just a repeated search.
}
return $saved;
}
/**
* Executes the saved query.
*
* @param PhabricatorSavedQuery
* @return The result of the query.
*/
public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) {
$query = id(new PhabricatorPasteQuery())
->withIDs($saved->getParameter('ids', array()))
->withPHIDs($saved->getParameter('phids', array()))
->withAuthorPHIDs($saved->getParameter('authorPHIDs', array()))
->withParentPHIDs($saved->getParameter('parentPHIDs', array()));
return $query;
}
/**
* Builds the search form using the request.
*
* @param PhabricatorSavedQuery The query to populate the form with.
* @return AphrontFormView The built form.
*/
public function buildSearchForm(PhabricatorSavedQuery $saved_query) {
$phids = $saved_query->getParameter('authorPHIDs', array());
$handles = id(new PhabricatorObjectHandleData($phids))
->setViewer($this->user)
->loadHandles();
$users_searched = mpull($handles, 'getFullName', 'getPHID');
$form = id(new AphrontFormView())
->setUser($this->user);
$form->appendChild(
id(new AphrontFormTokenizerControl())
->setDatasource('/typeahead/common/searchowner/')
->setName('set_users')
->setLabel(pht('Users'))
->setValue($users_searched));
$form->appendChild(
id(new AphrontFormSubmitControl())
->setValue(pht('Filter Pastes'))
->addCancelButton(
'/search/name/'.$saved_query->getQueryKey().'/',
pht('Save Custom Query...')));
return $form;
}
public function setPasteSearchFilter($filter) {
$this->filter = $filter;
return $this;
}
public function getPasteSearchFilter() {
return $this->filter;
}
public function setPasteSearchUser($user) {
$this->user = $user;
return $this;
}
}

File Metadata

Mime Type
text/x-diff
Expires
Sat, Nov 15, 7:31 PM (13 h, 12 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
338357
Default Alt Text
(12 KB)

Event Timeline