Page MenuHomePhabricator

D9770.id.diff
No OneTemporary

D9770.id.diff

diff --git a/src/applications/legalpad/application/PhabricatorApplicationLegalpad.php b/src/applications/legalpad/application/PhabricatorApplicationLegalpad.php
--- a/src/applications/legalpad/application/PhabricatorApplicationLegalpad.php
+++ b/src/applications/legalpad/application/PhabricatorApplicationLegalpad.php
@@ -49,8 +49,8 @@
'done/' => 'LegalpadDocumentDoneController',
'verify/(?P<code>[^/]+)/' =>
'LegalpadDocumentSignatureVerificationController',
- 'signatures/(?P<id>\d+)/(?:query/(?P<queryKey>[^/]+)/)?'
- => 'LegalpadDocumentSignatureListController',
+ 'signatures/(?:(?P<id>\d+)/)?(?:query/(?P<queryKey>[^/]+)/)?' =>
+ 'LegalpadDocumentSignatureListController',
'document/' => array(
'preview/' => 'PhabricatorMarkupPreviewController'),
));
diff --git a/src/applications/legalpad/controller/LegalpadController.php b/src/applications/legalpad/controller/LegalpadController.php
--- a/src/applications/legalpad/controller/LegalpadController.php
+++ b/src/applications/legalpad/controller/LegalpadController.php
@@ -19,6 +19,9 @@
->setViewer($user)
->addNavigationItems($nav->getMenu());
+ $nav->addLabel(pht('Signatures'));
+ $nav->addFilter('signatures/', pht('Find Signatures'));
+
return $nav;
}
diff --git a/src/applications/legalpad/controller/LegalpadDocumentSignatureListController.php b/src/applications/legalpad/controller/LegalpadDocumentSignatureListController.php
--- a/src/applications/legalpad/controller/LegalpadDocumentSignatureListController.php
+++ b/src/applications/legalpad/controller/LegalpadDocumentSignatureListController.php
@@ -7,7 +7,7 @@
private $document;
public function willProcessRequest(array $data) {
- $this->documentID = $data['id'];
+ $this->documentID = idx($data, 'id');
$this->queryKey = idx($data, 'queryKey');
}
@@ -15,23 +15,28 @@
$request = $this->getRequest();
$user = $request->getUser();
- $document = id(new LegalpadDocumentQuery())
- ->setViewer($user)
- ->withIDs(array($this->documentID))
- ->requireCapabilities(
- array(
- PhabricatorPolicyCapability::CAN_VIEW,
- PhabricatorPolicyCapability::CAN_EDIT,
- ))
- ->executeOne();
- if (!$document) {
- return new Aphront404Response();
+ if ($this->documentID) {
+ $document = id(new LegalpadDocumentQuery())
+ ->setViewer($user)
+ ->withIDs(array($this->documentID))
+ ->requireCapabilities(
+ array(
+ PhabricatorPolicyCapability::CAN_VIEW,
+ PhabricatorPolicyCapability::CAN_EDIT,
+ ))
+ ->executeOne();
+ if (!$document) {
+ return new Aphront404Response();
+ }
+
+ $this->document = $document;
}
- $this->document = $document;
+ $engine = id(new LegalpadDocumentSignatureSearchEngine());
- $engine = id(new LegalpadDocumentSignatureSearchEngine())
- ->setDocument($document);
+ if ($this->document) {
+ $engine->setDocument($this->document);
+ }
$controller = id(new PhabricatorApplicationSearchController($request))
->setQueryKey($this->queryKey)
@@ -47,10 +52,14 @@
$nav = new AphrontSideNavFilterView();
$nav->setBaseURI(new PhutilURI($this->getApplicationURI()));
- id(new LegalpadDocumentSignatureSearchEngine())
- ->setViewer($user)
- ->setDocument($this->document)
- ->addNavigationItems($nav->getMenu());
+ $engine = id(new LegalpadDocumentSignatureSearchEngine())
+ ->setViewer($user);
+
+ if ($this->document) {
+ $engine->setDocument($this->document);
+ }
+
+ $engine->addNavigationItems($nav->getMenu());
return $nav;
}
@@ -58,9 +67,15 @@
public function buildApplicationCrumbs() {
$crumbs = parent::buildApplicationCrumbs();
- $crumbs->addTextCrumb(
- $this->document->getMonogram(),
- '/'.$this->document->getMonogram());
+ if ($this->document) {
+ $crumbs->addTextCrumb(
+ $this->document->getMonogram(),
+ '/'.$this->document->getMonogram());
+ } else {
+ $crumbs->addTextCrumb(
+ pht('Signatures'),
+ '/legalpad/signatures/');
+ }
return $crumbs;
}
diff --git a/src/applications/legalpad/phid/PhabricatorLegalpadPHIDTypeDocument.php b/src/applications/legalpad/phid/PhabricatorLegalpadPHIDTypeDocument.php
--- a/src/applications/legalpad/phid/PhabricatorLegalpadPHIDTypeDocument.php
+++ b/src/applications/legalpad/phid/PhabricatorLegalpadPHIDTypeDocument.php
@@ -37,8 +37,8 @@
$document = $objects[$phid];
$name = $document->getDocumentBody()->getTitle();
$handle->setName($name);
- $handle->setFullName($name);
- $handle->setURI('/legalpad/view/'.$document->getID().'/');
+ $handle->setFullName($document->getMonogram().' '.$name);
+ $handle->setURI('/'.$document->getMonogram());
}
}
diff --git a/src/applications/legalpad/query/LegalpadDocumentSignatureSearchEngine.php b/src/applications/legalpad/query/LegalpadDocumentSignatureSearchEngine.php
--- a/src/applications/legalpad/query/LegalpadDocumentSignatureSearchEngine.php
+++ b/src/applications/legalpad/query/LegalpadDocumentSignatureSearchEngine.php
@@ -25,6 +25,15 @@
'signerPHIDs',
$this->readUsersFromRequest($request, 'signers'));
+ $saved->setParameter(
+ 'documentPHIDs',
+ $this->readPHIDsFromRequest(
+ $request,
+ 'documents',
+ array(
+ PhabricatorLegalpadPHIDTypeDocument::TYPECONST,
+ )));
+
return $saved;
}
@@ -38,6 +47,11 @@
if ($this->document) {
$query->withDocumentPHIDs(array($this->document->getPHID()));
+ } else {
+ $document_phids = $saved->getParameter('documentPHIDs', array());
+ if ($document_phids) {
+ $query->withDocumentPHIDs($document_phids);
+ }
}
return $query;
@@ -47,14 +61,25 @@
AphrontFormView $form,
PhabricatorSavedQuery $saved_query) {
+ $document_phids = $saved_query->getParameter('documentPHIDs', array());
$signer_phids = $saved_query->getParameter('signerPHIDs', array());
- $phids = array_merge($signer_phids);
+ $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('/typeahead/common/legalpaddocuments/')
+ ->setName('documents')
+ ->setLabel(pht('Documents'))
+ ->setValue(array_select_keys($handles, $document_phids)));
+ }
+
$form
->appendChild(
id(new AphrontFormTokenizerControl())
@@ -68,10 +93,7 @@
if ($this->document) {
return '/legalpad/signatures/'.$this->document->getID().'/'.$path;
} else {
- throw new Exception(
- pht(
- 'Searching for signatures outside of a document context is not '.
- 'currently supported.'));
+ return '/legalpad/signatures/'.$path;
}
}
@@ -97,9 +119,12 @@
}
protected function getRequiredHandlePHIDsForResultList(
- array $documents,
+ array $signatures,
PhabricatorSavedQuery $query) {
- return mpull($documents, 'getSignerPHID');
+
+ return array_merge(
+ mpull($signatures, 'getSignerPHID'),
+ mpull($signatures, 'getDocumentPHID'));
}
protected function renderResultList(
@@ -150,6 +175,7 @@
$rows[] = array(
$sig_icon,
+ $handles[$document->getPHID()]->renderLink(),
$handles[$signature->getSignerPHID()]->renderLink(),
$name,
phutil_tag(
@@ -166,16 +192,26 @@
->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',
));
@@ -184,6 +220,18 @@
->setHeaderText(pht('Signatures'))
->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;
}

File Metadata

Mime Type
text/plain
Expires
Wed, Mar 19, 4:32 PM (6 d, 13 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7711147
Default Alt Text
D9770.id.diff (8 KB)

Event Timeline