Correct a parameter order swap in "diffusion.historyquery" for Mercurial
[phabricator.git] / src / applications / project / engineextension / ProjectDatasourceEngineExtension.php
blobb566d58f93fce7db102ef0ecb5e37db67b773aca
1 <?php
3 final class ProjectDatasourceEngineExtension
4 extends PhabricatorDatasourceEngineExtension {
6 public function newQuickSearchDatasources() {
7 return array(
8 new PhabricatorProjectDatasource(),
9 );
12 public function newJumpURI($query) {
13 $viewer = $this->getViewer();
15 // Send "p" to Projects.
16 if (preg_match('/^p\z/i', $query)) {
17 return '/diffusion/';
20 // Send "p <string>" to a search for similar projects.
21 $matches = null;
22 if (preg_match('/^p\s+(.+)\z/i', $query, $matches)) {
23 $raw_query = $matches[1];
25 $engine = id(new PhabricatorProject())
26 ->newFerretEngine();
28 $compiler = id(new PhutilSearchQueryCompiler())
29 ->setEnableFunctions(true);
31 $raw_tokens = $compiler->newTokens($raw_query);
33 $fulltext_tokens = array();
34 foreach ($raw_tokens as $raw_token) {
35 $fulltext_token = id(new PhabricatorFulltextToken())
36 ->setToken($raw_token);
37 $fulltext_tokens[] = $fulltext_token;
40 $projects = id(new PhabricatorProjectQuery())
41 ->setViewer($viewer)
42 ->withFerretConstraint($engine, $fulltext_tokens)
43 ->execute();
44 if (count($projects) == 1) {
45 // Just one match, jump to project.
46 return head($projects)->getURI();
47 } else {
48 // More than one match, jump to search.
49 return urisprintf(
50 '/project/?order=relevance&query=%s#R',
51 $raw_query);
55 return null;