mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-29 17:00:59 +01:00
Phriction handles and search
Summary: Index Phriction documents in search, and allow PhabricatorObjectHandleData to load them. Test Plan: Searched for "pokemons", got my wiki page as a search result. Reviewed By: hsb Reviewers: hsb, codeblock, jungejason, tuomaspelkonen, aran CC: aran, hsb Differential Revision: 648
This commit is contained in:
parent
a49138defd
commit
349a8c60e8
9 changed files with 102 additions and 0 deletions
|
@ -519,6 +519,7 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorSearchIndexController' => 'applications/search/controller/index',
|
'PhabricatorSearchIndexController' => 'applications/search/controller/index',
|
||||||
'PhabricatorSearchManiphestIndexer' => 'applications/search/index/indexer/maniphest',
|
'PhabricatorSearchManiphestIndexer' => 'applications/search/index/indexer/maniphest',
|
||||||
'PhabricatorSearchMySQLExecutor' => 'applications/search/execute/mysql',
|
'PhabricatorSearchMySQLExecutor' => 'applications/search/execute/mysql',
|
||||||
|
'PhabricatorSearchPhrictionIndexer' => 'applications/search/index/indexer/phriction',
|
||||||
'PhabricatorSearchQuery' => 'applications/search/storage/query',
|
'PhabricatorSearchQuery' => 'applications/search/storage/query',
|
||||||
'PhabricatorSearchRelationship' => 'applications/search/constants/relationship',
|
'PhabricatorSearchRelationship' => 'applications/search/constants/relationship',
|
||||||
'PhabricatorSearchResultView' => 'applications/search/view/searchresult',
|
'PhabricatorSearchResultView' => 'applications/search/view/searchresult',
|
||||||
|
@ -1022,6 +1023,7 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorSearchIndexController' => 'PhabricatorSearchBaseController',
|
'PhabricatorSearchIndexController' => 'PhabricatorSearchBaseController',
|
||||||
'PhabricatorSearchManiphestIndexer' => 'PhabricatorSearchDocumentIndexer',
|
'PhabricatorSearchManiphestIndexer' => 'PhabricatorSearchDocumentIndexer',
|
||||||
'PhabricatorSearchMySQLExecutor' => 'PhabricatorSearchExecutor',
|
'PhabricatorSearchMySQLExecutor' => 'PhabricatorSearchExecutor',
|
||||||
|
'PhabricatorSearchPhrictionIndexer' => 'PhabricatorSearchDocumentIndexer',
|
||||||
'PhabricatorSearchQuery' => 'PhabricatorSearchDAO',
|
'PhabricatorSearchQuery' => 'PhabricatorSearchDAO',
|
||||||
'PhabricatorSearchResultView' => 'AphrontView',
|
'PhabricatorSearchResultView' => 'AphrontView',
|
||||||
'PhabricatorSearchSelectController' => 'PhabricatorSearchController',
|
'PhabricatorSearchSelectController' => 'PhabricatorSearchController',
|
||||||
|
|
|
@ -118,6 +118,7 @@ class PhabricatorObjectHandle {
|
||||||
PhabricatorPHIDConstants::PHID_TYPE_TASK => 'Task',
|
PhabricatorPHIDConstants::PHID_TYPE_TASK => 'Task',
|
||||||
PhabricatorPHIDConstants::PHID_TYPE_DREV => 'Revision',
|
PhabricatorPHIDConstants::PHID_TYPE_DREV => 'Revision',
|
||||||
PhabricatorPHIDConstants::PHID_TYPE_CMIT => 'Commit',
|
PhabricatorPHIDConstants::PHID_TYPE_CMIT => 'Commit',
|
||||||
|
PhabricatorPHIDConstants::PHID_TYPE_WIKI => 'Phriction',
|
||||||
);
|
);
|
||||||
|
|
||||||
return idx($map, $this->getType());
|
return idx($map, $this->getType());
|
||||||
|
|
|
@ -345,6 +345,35 @@ class PhabricatorObjectHandleData {
|
||||||
$handles[$phid] = $handle;
|
$handles[$phid] = $handle;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case PhabricatorPHIDConstants::PHID_TYPE_WIKI:
|
||||||
|
$document_dao = newv('PhrictionDocument', array());
|
||||||
|
$content_dao = newv('PhrictionContent', array());
|
||||||
|
|
||||||
|
$conn = $document_dao->establishConnection('r');
|
||||||
|
$documents = queryfx_all(
|
||||||
|
$conn,
|
||||||
|
'SELECT * FROM %T document JOIN %T content
|
||||||
|
ON document.contentID = content.id
|
||||||
|
WHERE document.phid IN (%Ls)',
|
||||||
|
$document_dao->getTableName(),
|
||||||
|
$content_dao->getTableName(),
|
||||||
|
$phids);
|
||||||
|
$documents = ipull($documents, null, 'phid');
|
||||||
|
|
||||||
|
foreach ($phids as $phid) {
|
||||||
|
$handle = new PhabricatorObjectHandle();
|
||||||
|
$handle->setPHID($phid);
|
||||||
|
$handle->setType($type);
|
||||||
|
if (empty($documents[$phid])) {
|
||||||
|
$handle->setName('Unknown Document');
|
||||||
|
} else {
|
||||||
|
$info = $documents[$phid];
|
||||||
|
$handle->setName($info['title']);
|
||||||
|
$handle->setURI(PhrictionDocument::getSlugURI($info['slug']));
|
||||||
|
}
|
||||||
|
$handles[$phid] = $handle;
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
$loader = null;
|
$loader = null;
|
||||||
if (isset($external_loaders[$type])) {
|
if (isset($external_loaders[$type])) {
|
||||||
|
|
|
@ -10,9 +10,11 @@ phutil_require_module('phabricator', 'applications/files/uri');
|
||||||
phutil_require_module('phabricator', 'applications/maniphest/constants/owner');
|
phutil_require_module('phabricator', 'applications/maniphest/constants/owner');
|
||||||
phutil_require_module('phabricator', 'applications/phid/constants');
|
phutil_require_module('phabricator', 'applications/phid/constants');
|
||||||
phutil_require_module('phabricator', 'applications/phid/handle');
|
phutil_require_module('phabricator', 'applications/phid/handle');
|
||||||
|
phutil_require_module('phabricator', 'applications/phriction/storage/document');
|
||||||
phutil_require_module('phabricator', 'applications/repository/constants/repositorytype');
|
phutil_require_module('phabricator', 'applications/repository/constants/repositorytype');
|
||||||
phutil_require_module('phabricator', 'applications/repository/storage/repository');
|
phutil_require_module('phabricator', 'applications/repository/storage/repository');
|
||||||
phutil_require_module('phabricator', 'infrastructure/env');
|
phutil_require_module('phabricator', 'infrastructure/env');
|
||||||
|
phutil_require_module('phabricator', 'storage/queryfx');
|
||||||
|
|
||||||
phutil_require_module('phutil', 'symbols');
|
phutil_require_module('phutil', 'symbols');
|
||||||
phutil_require_module('phutil', 'utils');
|
phutil_require_module('phutil', 'utils');
|
||||||
|
|
|
@ -104,6 +104,9 @@ class PhrictionEditController
|
||||||
$document->setContentID($new_content->getID());
|
$document->setContentID($new_content->getID());
|
||||||
$document->save();
|
$document->save();
|
||||||
|
|
||||||
|
$document->attachContent($new_content);
|
||||||
|
PhabricatorSearchPhrictionIndexer::indexDocument($document);
|
||||||
|
|
||||||
$uri = PhrictionDocument::getSlugURI($document->getSlug());
|
$uri = PhrictionDocument::getSlugURI($document->getSlug());
|
||||||
return id(new AphrontRedirectResponse())->setURI($uri);
|
return id(new AphrontRedirectResponse())->setURI($uri);
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,6 +11,7 @@ phutil_require_module('phabricator', 'aphront/response/redirect');
|
||||||
phutil_require_module('phabricator', 'applications/phriction/controller/base');
|
phutil_require_module('phabricator', 'applications/phriction/controller/base');
|
||||||
phutil_require_module('phabricator', 'applications/phriction/storage/content');
|
phutil_require_module('phabricator', 'applications/phriction/storage/content');
|
||||||
phutil_require_module('phabricator', 'applications/phriction/storage/document');
|
phutil_require_module('phabricator', 'applications/phriction/storage/document');
|
||||||
|
phutil_require_module('phabricator', 'applications/search/index/indexer/phriction');
|
||||||
phutil_require_module('phabricator', 'infrastructure/env');
|
phutil_require_module('phabricator', 'infrastructure/env');
|
||||||
phutil_require_module('phabricator', 'view/form/base');
|
phutil_require_module('phabricator', 'view/form/base');
|
||||||
phutil_require_module('phabricator', 'view/form/control/static');
|
phutil_require_module('phabricator', 'view/form/control/static');
|
||||||
|
|
|
@ -72,6 +72,7 @@ class PhabricatorSearchController extends PhabricatorSearchBaseController {
|
||||||
PhabricatorPHIDConstants::PHID_TYPE_DREV => 'Differential Revisions',
|
PhabricatorPHIDConstants::PHID_TYPE_DREV => 'Differential Revisions',
|
||||||
PhabricatorPHIDConstants::PHID_TYPE_CMIT => 'Repository Commits',
|
PhabricatorPHIDConstants::PHID_TYPE_CMIT => 'Repository Commits',
|
||||||
PhabricatorPHIDConstants::PHID_TYPE_TASK => 'Maniphest Tasks',
|
PhabricatorPHIDConstants::PHID_TYPE_TASK => 'Maniphest Tasks',
|
||||||
|
PhabricatorPHIDConstants::PHID_TYPE_WIKI => 'Phriction Documents',
|
||||||
PhabricatorPHIDConstants::PHID_TYPE_USER => 'Phabricator Users',
|
PhabricatorPHIDConstants::PHID_TYPE_USER => 'Phabricator Users',
|
||||||
) + $more;
|
) + $more;
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,46 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright 2011 Facebook, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
class PhabricatorSearchPhrictionIndexer
|
||||||
|
extends PhabricatorSearchDocumentIndexer {
|
||||||
|
|
||||||
|
public static function indexDocument(PhrictionDocument $document) {
|
||||||
|
$content = $document->getContent();
|
||||||
|
|
||||||
|
$doc = new PhabricatorSearchAbstractDocument();
|
||||||
|
$doc->setPHID($document->getPHID());
|
||||||
|
$doc->setDocumentType(PhabricatorPHIDConstants::PHID_TYPE_WIKI);
|
||||||
|
$doc->setDocumentTitle($content->getTitle());
|
||||||
|
|
||||||
|
// TODO: This isn't precisely correct, denormalize into the Document table?
|
||||||
|
$doc->setDocumentCreated($content->getDateCreated());
|
||||||
|
$doc->setDocumentModified($content->getDateModified());
|
||||||
|
|
||||||
|
$doc->addField(
|
||||||
|
PhabricatorSearchField::FIELD_BODY,
|
||||||
|
$content->getContent());
|
||||||
|
|
||||||
|
$doc->addRelationship(
|
||||||
|
PhabricatorSearchRelationship::RELATIONSHIP_AUTHOR,
|
||||||
|
$content->getAuthorPHID(),
|
||||||
|
PhabricatorPHIDConstants::PHID_TYPE_USER,
|
||||||
|
$content->getDateCreated());
|
||||||
|
|
||||||
|
PhabricatorSearchDocument::reindexAbstractDocument($doc);
|
||||||
|
}
|
||||||
|
}
|
17
src/applications/search/index/indexer/phriction/__init__.php
Normal file
17
src/applications/search/index/indexer/phriction/__init__.php
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* This file is automatically generated. Lint this module to rebuild it.
|
||||||
|
* @generated
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
phutil_require_module('phabricator', 'applications/phid/constants');
|
||||||
|
phutil_require_module('phabricator', 'applications/search/constants/field');
|
||||||
|
phutil_require_module('phabricator', 'applications/search/constants/relationship');
|
||||||
|
phutil_require_module('phabricator', 'applications/search/index/abstractdocument');
|
||||||
|
phutil_require_module('phabricator', 'applications/search/index/indexer/base');
|
||||||
|
phutil_require_module('phabricator', 'applications/search/storage/document/document');
|
||||||
|
|
||||||
|
|
||||||
|
phutil_require_source('PhabricatorSearchPhrictionIndexer.php');
|
Loading…
Reference in a new issue