1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-11-26 08:42:41 +01:00

Title/Description quering for Passphrase credential

Summary: Fixes T6562, Title/Description querying for Passphrase

Test Plan: Open Passphrase, open advanced queries, enter a title and/or description. Search results should show credentials matching the search.

Reviewers: #blessed_reviewers, epriestley

Reviewed By: #blessed_reviewers, epriestley

Subscribers: Korvin, epriestley

Maniphest Tasks: T6562

Differential Revision: https://secure.phabricator.com/D10953
This commit is contained in:
lkassianik 2014-12-09 16:23:09 -08:00 committed by epriestley
parent d5e7cd5590
commit edc4c219ca
5 changed files with 73 additions and 3 deletions

View file

@ -1186,6 +1186,7 @@ phutil_register_library_map(array(
'PassphraseRemarkupRule' => 'applications/passphrase/remarkup/PassphraseRemarkupRule.php', 'PassphraseRemarkupRule' => 'applications/passphrase/remarkup/PassphraseRemarkupRule.php',
'PassphraseSSHKey' => 'applications/passphrase/keys/PassphraseSSHKey.php', 'PassphraseSSHKey' => 'applications/passphrase/keys/PassphraseSSHKey.php',
'PassphraseSchemaSpec' => 'applications/passphrase/storage/PassphraseSchemaSpec.php', 'PassphraseSchemaSpec' => 'applications/passphrase/storage/PassphraseSchemaSpec.php',
'PassphraseSearchIndexer' => 'applications/passphrase/search/PassphraseSearchIndexer.php',
'PassphraseSecret' => 'applications/passphrase/storage/PassphraseSecret.php', 'PassphraseSecret' => 'applications/passphrase/storage/PassphraseSecret.php',
'PasteConduitAPIMethod' => 'applications/paste/conduit/PasteConduitAPIMethod.php', 'PasteConduitAPIMethod' => 'applications/paste/conduit/PasteConduitAPIMethod.php',
'PasteCreateConduitAPIMethod' => 'applications/paste/conduit/PasteCreateConduitAPIMethod.php', 'PasteCreateConduitAPIMethod' => 'applications/paste/conduit/PasteCreateConduitAPIMethod.php',
@ -4280,6 +4281,7 @@ phutil_register_library_map(array(
'PassphraseRemarkupRule' => 'PhabricatorObjectRemarkupRule', 'PassphraseRemarkupRule' => 'PhabricatorObjectRemarkupRule',
'PassphraseSSHKey' => 'PassphraseAbstractKey', 'PassphraseSSHKey' => 'PassphraseAbstractKey',
'PassphraseSchemaSpec' => 'PhabricatorConfigSchemaSpec', 'PassphraseSchemaSpec' => 'PhabricatorConfigSchemaSpec',
'PassphraseSearchIndexer' => 'PhabricatorSearchDocumentIndexer',
'PassphraseSecret' => 'PassphraseDAO', 'PassphraseSecret' => 'PassphraseDAO',
'PasteConduitAPIMethod' => 'ConduitAPIMethod', 'PasteConduitAPIMethod' => 'ConduitAPIMethod',
'PasteCreateConduitAPIMethod' => 'PasteConduitAPIMethod', 'PasteCreateConduitAPIMethod' => 'PasteConduitAPIMethod',

View file

@ -202,5 +202,7 @@ final class PassphraseCredentialTransactionEditor
return $errors; return $errors;
} }
protected function supportsSearch() {
return true;
}
} }

View file

@ -9,6 +9,7 @@ final class PassphraseCredentialQuery
private $providesTypes; private $providesTypes;
private $isDestroyed; private $isDestroyed;
private $allowConduit; private $allowConduit;
private $nameContains;
private $needSecrets; private $needSecrets;
@ -42,6 +43,11 @@ final class PassphraseCredentialQuery
return $this; return $this;
} }
public function withNameContains($name_contains) {
$this->nameContains = $name_contains;
return $this;
}
public function needSecrets($need_secrets) { public function needSecrets($need_secrets) {
$this->needSecrets = $need_secrets; $this->needSecrets = $need_secrets;
return $this; return $this;
@ -140,6 +146,13 @@ final class PassphraseCredentialQuery
(int)$this->allowConduit); (int)$this->allowConduit);
} }
if (strlen($this->nameContains)) {
$where[] = qsprintf(
$conn_r,
'name LIKE %~',
$this->nameContains);
}
return $this->formatWhereClause($where); return $this->formatWhereClause($where);
} }

View file

@ -17,6 +17,7 @@ final class PassphraseCredentialSearchEngine
$saved->setParameter( $saved->setParameter(
'isDestroyed', 'isDestroyed',
$this->readBoolFromRequest($request, 'isDestroyed')); $this->readBoolFromRequest($request, 'isDestroyed'));
$saved->setParameter('name', $request->getStr('name'));
return $saved; return $saved;
} }
@ -29,6 +30,11 @@ final class PassphraseCredentialSearchEngine
$query->withIsDestroyed($destroyed); $query->withIsDestroyed($destroyed);
} }
$name = $saved->getParameter('name');
if (strlen($name)) {
$query->withNameContains($name);
}
return $query; return $query;
} }
@ -36,7 +42,10 @@ final class PassphraseCredentialSearchEngine
AphrontFormView $form, AphrontFormView $form,
PhabricatorSavedQuery $saved_query) { PhabricatorSavedQuery $saved_query) {
$form->appendChild( $name = $saved_query->getParameter('name');
$form
->appendChild(
id(new AphrontFormSelectControl()) id(new AphrontFormSelectControl())
->setName('isDestroyed') ->setName('isDestroyed')
->setLabel(pht('Status')) ->setLabel(pht('Status'))
@ -46,7 +55,12 @@ final class PassphraseCredentialSearchEngine
'' => pht('Show All Credentials'), '' => pht('Show All Credentials'),
'false' => pht('Show Only Active Credentials'), 'false' => pht('Show Only Active Credentials'),
'true' => pht('Show Only Destroyed Credentials'), 'true' => pht('Show Only Destroyed Credentials'),
))); )))
->appendChild(
id(new AphrontFormTextControl())
->setName('name')
->setLabel(pht('Name Contains'))
->setValue($name));
} }
protected function getURI($path) { protected function getURI($path) {

View file

@ -0,0 +1,39 @@
<?php
final class PassphraseSearchIndexer extends PhabricatorSearchDocumentIndexer {
public function getIndexableObject() {
return new PassphraseCredential();
}
protected function buildAbstractDocumentByPHID($phid) {
$credential = $this->loadDocumentByPHID($phid);
$doc = new PhabricatorSearchAbstractDocument();
$doc->setPHID($credential->getPHID());
$doc->setDocumentType(PassphraseCredentialPHIDType::TYPECONST);
$doc->setDocumentTitle($credential->getName());
$doc->setDocumentCreated($credential->getDateCreated());
$doc->setDocumentModified($credential->getDateModified());
$doc->addField(
PhabricatorSearchField::FIELD_BODY,
$credential->getDescription());
$doc->addRelationship(
$credential->getIsDestroyed()
? PhabricatorSearchRelationship::RELATIONSHIP_CLOSED
: PhabricatorSearchRelationship::RELATIONSHIP_OPEN,
$credential->getPHID(),
PassphraseCredentialPHIDType::TYPECONST,
time());
$this->indexTransactions(
$doc,
new PassphraseCredentialTransactionQuery(),
array($phid));
return $doc;
}
}